使用正则表达式查找部分内容的完整单词

时间:2014-12-21 00:31:32

标签: javascript regex

我有一部分内容,我应该使用正则表达式在字符串中找到完整的单词。 例如,我有以下文字:

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。我必须找到:identifieridentififfiieer

我尝试了以下正则表达式(javascript):

[\ ,!@#$%^&*()\.\"]*(identifi.*?)[\ ,!@#$%^&*()\d\.\"]

因此它会搜索由标点字符或空格包围的单词部分。有时这个正则表达式工作正常,但在这种情况下它还包括引号和点匹配。它出什么问题了?也许有更好的主意?

2 个答案:

答案 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是此代码的演示。