簡體   English   中英

javascript正則表達式不匹配單詞,后跟帶有中間文本的模式

[英]javascript regex match word not followed by pattern with text inbetween

文本:

id="word1 word2 word3/343/els/425/word4 word5 word6"
wordA wordB Bword2B word1 word2 word3
blah blah blah

我試圖匹配整個單詞:但文本中沒有word1,word2,word3 ,但我不希望它們在文本的id="word1 word2 word3/343/els/425/word4 word5 word6"行中id="word1 word2 word3/343/els/425/word4 word5 word6" ,這些詞不是拉丁語。

當前方法:

var sWord = "word2";
text = text.replace( new RegExp(sWord+"(?!\/[0-9])", "gi"), "<span style='background-color: yellow'>"+sWord+"</span>");

這種方法僅適用於word3,不適用於word1或word2,因此如何在正則表達式中引入在NUMBER之前還有另一個單詞的可能性?

"(?!.\/[0-9])"

我加了點“。” 到正則表達式。 但它似乎不起作用。

另外,如何增加整個單詞匹配的可能性? \\ b\\ S似乎不起作用,因為單詞不在拉丁語中。

先感謝您!

編輯: jsfiddle http://jsfiddle.net/GLt4F/5/

如您所見,word1和word2的按鈕中斷,但word3卻沒有,因為匹配正確

編輯2:

改寫問題:如果不接BBB,則僅匹配AAA,並且兩者之間可以是任何東西。 例如:

AAA frefe BBB不應該匹配
AAA BBB不應該匹配
AAA frefe cc應該匹配

/AAA([\s\S](?!=BBB))*$/

應該這樣做。

另外,如何增加整個單詞匹配的可能性? \\ b和\\ S似乎不起作用,因為單詞不在拉丁語中。

JavaScript沒有unicode兼容模式,因此您必須為char單詞編寫自己的字符集並使用否定匹配,因此

(?:^|[^A-Za-z0-9_$])

在AAA之前,並且在JS中沒有后退,因此先前的非單詞char將成為捕獲的組0的一部分。

(?!(.*)\/[0-9])

這似乎可以解決問題(因為介於兩者之間時不匹配。不知道是否存在漏洞,或者這是否是一個可靠的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM