我有一部分内容,我应该使用正则表达式在字符串中找到完整的单词。 例如,我有以下文字:
If it bothers you, call it a "const identifier" instead.
It doesn't matter whether you call max a const variable or a const identififfiieer. What matters...
这个词的一部分:identifi
。我必须找到:identifier
和identififfiieer
。
我尝试了以下正则表达式(javascript):
[\ ,!@#$%^&*()\.\"]*(identifi.*?)[\ ,!@#$%^&*()\d\.\"]
因此它会搜索由标点字符或空格包围的单词部分。有时这个正则表达式工作正常,但在这种情况下它还包括引号和点匹配。它出什么问题了?也许有更好的主意?
答案 0 :(得分:2)
您可以使用
\bidentifi.*?\b
这意味着:
'foo "bar identifier"'.match(/\bidentifi.*?\b/g); // ["identifier"]
'foo identififfiieer. bar'.match(/\bidentifi.*?\b/g); // ["identififfiieer"]
答案 1 :(得分:1)
您可以使用\w*identifi\w*
\w
代表“单词字符”。它始终与ASCII字符[A-Za-z0-9_]
匹配。请注意包含下划线和数字。
Here是一个演示,展示了正则表达式及其匹配。
作为旁注,如果使用捕获组,原始正则表达式实际上可以正常工作:
var body = 'If it bothers you, call it a "const identifier" instead.\nIt doesn\'t matter whether you call max a const variable or a const identififfiieer. What matters...';
var reg = /[\ ,!@#$%^&*()\.\"]*(identifi.*?)[\ ,!@#$%^&*()\d\.\"]/g;
var match;
while (match = reg.exec(body)) {
console.log('>' + match[1] + '<');
}
输出:
>identifier<
>identififfiieer<
Here是此代码的演示。