繁体   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