2017-08-31 73 views
0

我想測試一個字符串是否包含一個單詞。 所以,我有這個正則表達式:/\bde\b/gi正則表達式表現不如預期的那樣

而且,如果我的字符串是「Comida decão」,它的作品。

但是,如果我有「Necessidade de adeus depois」這樣的字符串,它也與「必需品」,「adeus」和「depois」中的「de」匹配。

此外,當我嘗試使用類似於「éa vida」的字符串中的重音匹配單詞時,使用如下正則表達式:/\bé\b/gi什麼也沒有找到。 但是,如果我搜索中間有口音的單詞,它會被發現!因此,在字符串「Onível」中,如果我使用以下正則表達式/\bnível\b/gi 它匹配正確的單詞。

我一直在尋找類似的問題,但我仍然無法解決我的問題。

Btw,here第一個問題沒有發生,它按預期工作。

謝謝!

編輯:增加了我的代碼

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

剛試過的[Regex101(https://regex101.com/),我無法重現,我得到正確的結果 – ctwheels

+2

問題是最有可能你的c頌歌,你應該表現出來。 –

+0

你可以在你使用它的地方發佈代碼嗎? – kauffee000

回答

1

的最接近我已經找到了工作的事情是這樣的。就像我在評論中說的那樣,字邊界和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 :實際上最後的編輯是錯誤的。它不依賴於長度,但是如果重音字符靠近邊界或者沒有。所以這將是/(?=^|\W)éternel\b/giu爲「éternel」和/\bné(?=$|\W)/giu爲「NE」

更新的正則表達式的例子: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>
:什麼我想,要回答你最後的評論一個小例子

+0

感謝您的回答!它適用於帶有口音的單個字符,但不適用於其他任何內容,如果您寫入「vida」或「bvéb」,它將不會被找到:( – ninjacow55

+0

編輯答案,如果您可以測試你查找的時間長度,應該通過 – Kaddath

+0

實際上是最後一個評論是錯誤的,請參閱edit2 – Kaddath