谁能解释一下我的正则表达式出了什么问题?
Could anyone explain what's wrong with my regex?
我有一个小正则表达式的问题。在一个句子中,我想匹配一个或多个单词,并且在前后允许的唯一字符是一个可选的空格字符。
E。g:在句子Ut volutpat egestas volutpat.
中,我想匹配volutpat
而不是volutpat.
,除非我专门寻找volutpat.
。
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次,因为有两个单词匹配。
相关文章:
- JavaScript中的正则表达式应该是什么
- 不接受0-0-0的正则表达式是什么
- 这个正则表达式的日期/时间有什么问题
- 匹配某个字符后所有文本的正则表达式是什么
- 什么将是日期格式的正则表达式'dd-M-y'
- 我应该使用什么正则表达式来验证数字模式
- 正则表达式上的重音符号有什么用
- 我的电子邮件正则表达式有什么问题
- 什么'用这个正则表达式查找URL是错误的
- 印地语数字的正则表达式是什么
- 什么是最不坏的正则表达式来拒绝绝对无效的电子邮件地址
- 以下情况的有效正则表达式是什么
- 这个正则表达式我错过了什么
- 什么是用于断开变量可能包含“&”的查询字符串的正则表达式
- 这个正则表达式有什么问题
- 什么正则表达式模式将从包含的外部HTML文本中提取内部HTML
- 什么是用于删除大写字母之间的空格的正则表达式,但在单词之间保留空格
- 在这种情况下,正则表达式中的“[”是什么( 2 个问题)
- 需要使用什么正则表达式将内容插入某些字符的第 n 次出现之间
- 匹配正确字符串的确切正则表达式是什么