![](/img/trans.png)
[英]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.