我有一个小正则表达式的问题。在一个句子中,我想匹配一个或多个单词,前后允许的唯一字符是一个可选的空格字符。
例如:在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.'
也必须有效。
答案 0 :(得分:6)
在动态构建正则表达式时,您需要记住,任何反斜杠都需要再次转义:
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
不会被转义,您可能还想查看escaping that, too。
答案 1 :(得分:1)
答案 2 :(得分:1)
那是因为您将空格指定为可选空格,因此它也会匹配除空格之外没有边界或边界的实体。
在你指定的句子中,单词出现两次,第一次与空格匹配,第二次与单词匹配(周围没有任何空格)。
答案 3 :(得分:0)
除非用反斜杠word
转义,否则您在\
中输入的任何特殊字符都将被视为此类字符。您提供的示例将匹配2次,因为有两个匹配的单词。