簡體   English   中英

誰能解釋我的正則表達式有什么問題?

[英]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無法逃脫,您可能也想研究一下轉義

你想邊要匹配空格字符,或一個行的開始/結束。 所以:

(\s|^)(volutpat)(\s|$)

即使搜索詞本身包含一個點,這也應該起作用。 在起作用

那是因為您將空格指定為可選,因此它也將匹配沒有邊界或除該邊界以外沒有邊界的實體。

在您指定的句子中,單詞出現兩次,第一個單詞與空格匹配,第二個單詞與單詞本身匹配(周圍沒有空格)。

您輸入到word任何特殊字符都將被視為此類字符,除非它們被反斜杠\\所轉義。 您提供的示例將匹配2次,因為有兩個單詞匹配。

暫無
暫無

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

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