gpt4 book ai didi

javascript - 正则表达式的行为不符合预期

转载 作者:行者123 更新时间:2023-12-03 03:33:23 24 4
gpt4 key购买 nike

我想测试一个字符串是否包含单词。所以,我有这个正则表达式:/\bde\b/gi

而且,如果我的字符串是“Comida de cão”,它就可以工作。

但是,如果我有一个像“Necessidade de adeus depois”这样的字符串,它也会匹配“necessidade”、“adeus”和“depois”中的“de”。

此外,当我尝试在“é a vida”等字符串中匹配带有重音符号的单词时,使用如下正则表达式: /\bé\b/gi 什么也找不到。但如果我搜索一个中间带有重音的单词,就会找到它!因此,在字符串“O nível”中,如果我使用以下正则表达式 /\bnível\b/gi 它与正确的单词匹配。

我一直在寻找类似的问题,但仍然没有解决我的问题。

顺便说一句,here第一个问题没有发生,并且按预期工作。

谢谢!

编辑:添加我的代码

var myRe = new RegExp("\\b" + query + "\\b","iu");
var match = myRe.test("Necessidade de adeus depois");

最佳答案

我发现的最接近工作的东西是这个。正如我的评论中所述,单词边界和 unicode 字符似乎存在问题。

我认为这个解决方案可以改进,但它使用正向前瞻(不消耗字符)来测试是否开始 ^ 或结束 $字符串,或者如果不是单词字符:

//accent as a word end or start
/(?=^|\W)é(?=$|\W)/giu

//no accent as a word end or start
/\bnível\b/giu

编辑:是的,确实如此,不适用于多个字符。如果您可以测试要测试的长度,您仍然可以根据是否搜索 1 个或多个字符来做出不同的情况

EDIT2:实际上上次编辑是错误的。它不取决于长度,而是取决于重音字符是否靠近边界。因此“éternel”的形式为 /(?=^|\W)éternel\b/giu/\bné(?=$|\W)/giu对于“né”

更新了正则表达式示例:https://regex101.com/r/6v2gId/3

EDIT3:我尝试的一个小例子,用于回答您的最后评论:

var query = 'de';
var myRe = new RegExp("\\b" + query + "\\b","giu");
var match = myRe.test("determinado de necessidade de comer é de");
document.getElementById('res1').innerHTML = match;
var match = myRe.test("determinado necessidade comer é e");
document.getElementById('res2').innerHTML = match;
var query = 'dé';
var myRe = new RegExp("\\b" + query + "(?=$|\\W)","giu");
var match = myRe.test("déterminado dé necessidadé de comer é de");
document.getElementById('res3').innerHTML = match;
var match = myRe.test("déterminado necessidadé comer é de");
document.getElementById('res4').innerHTML = match;
<span>test with "\\bde\\b":</span><br/>
<span>for "determinado de necessidade de comer é de":</span><span id="res1"></span><br/>
<span>for "determinado necessidade comer é e":</span><span id="res2"></span><br/><br/>
<span>test with "\\bdé(?=$|\\W)":</span><br/>
<span>for "déterminado dé necessidadé de comer é de":</span><span id="res3"></span><br/>
<span>for "déterminado necessidadé comer é de":</span><span id="res4"></span>

关于javascript - 正则表达式的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45984988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com