[英]Regex doesn't work. What's wrong with my code? Can anyone help me fix this
[英]Could anyone explain what's wrong with my regex?
我對一個小的正則表達式有疑問。 在一個句子中,我想匹配一個或多個單詞,並且前后允許的唯一字符是可選的空格字符。
例如:在句子Ut volutpat egestas volutpat.
我想匹配volutpat
而不是volutpat.
除非我正在尋找volutpat.
特別。
這是代碼( jsFiddle ):
var sentence = 'Ut volutpat egestas volutpat.',
word = 'volutpat',
regex = new RegExp('[\s]?' + word + '[\s]?', 'g');
console.log(sentence.match(regex));
不幸的是,在控制台中,上面的代碼返回了兩個匹配項:
[ "volutpat", "volutpat" ]
請注意, word = 'volutpat egestas'
或word = 'volutpat.'
如果我必須匹配它們,也必須工作。
動態構建正則表達式時,需要記住,所有反斜杠都需要再次轉義:
var sentence = 'Ut volutpat egestas volutpat.',
word = 'volutpat',
regex = new RegExp('[\\s]?' + word + '[\\s]?', 'g');
另外,您可能想檢查空格或開始或結尾,而不是空格(可選),因此:
var sentence = 'Ut volutpat egestas volutpat.',
word = 'volutpat',
regex = new RegExp('(^|\\s)' + word + '(\\s|$)', 'g');
假設word
無法逃脫,您可能也想研究一下轉義 。
那是因為您將空格指定為可選,因此它也將匹配沒有邊界或除該邊界以外沒有邊界的實體。
在您指定的句子中,單詞出現兩次,第一個單詞與空格匹配,第二個單詞與單詞本身匹配(周圍沒有空格)。
您輸入到word
任何特殊字符都將被視為此類字符,除非它們被反斜杠\\
所轉義。 您提供的示例將匹配2次,因為有兩個單詞匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.