javascript正则表达式的正向前瞻

时间:2014-06-15 05:51:25

标签: javascript regex

我一直搞乱了正则表达式..我发现对我来说很难......我见过像这样的代码:

function myFunction() {
   var str = "Is this all there is";
   var patt1 = /is(?= all)/;
   var result = str.match(patt1);
   document.getElementById("demo").innerHTML = result;
}

当我运行此代码时,它给了我输出is

但是,当我添加像/is(?=there)/时,它没有输出任何东西。我是正规表达的新手..希望你们能帮助我们理解正则表达式中的积极前瞻。我已经按照许多教程对它没有帮助。

希望你们能帮助我。谢谢!

2 个答案:

答案 0 :(得分:27)

正则表达式is(?= all)与字母is匹配,但前提是立即后跟字母all

同样,正则表达式is(?=there)与字母is匹配,但前提是立即后跟字母there

如果您将这两者合并到is(?= all)(?=there),则表示您尝试匹配字母is,但前提是立即,后跟字母{{1}同时 AND 字母all ...... 这是不可能的。

如果您想匹配字母there,但前提是立即 后面的字母is 字母all,然后您可以使用:

there

另一方面,如果您希望匹配字母is(?= all|there),但只有当立即后跟字母is时,您才可以使用:

all there

如果我希望is(?= all there)isall关注,但字符串中的任何位置,该怎么办?

然后您可以使用there

之类的内容

理解前瞻的关键

结论的关键是要明白,前瞻是一个断言,它会检查某些内容,或者在字符串中的特定位置之前。这就是为什么我立即加强 。以下文章应该消除任何混淆。

<强>参考

Mastering Lookahead and Lookbehind

答案 1 :(得分:8)

肯定前瞻there没有立即跟 而失败。

is(?=there) # matches is when immediately followed by there

如果there跟在字符串中的某个位置,要匹配 ,您可以执行以下操作:

is(?=.*there) 

<强>解释

is          # 'is'
(?=         # look ahead to see if there is:
  .*        #   any character except \n (0 or more times)
  there     #   'there'
)           # end of look-ahead

请参阅Demo

我建议的详细教程:How to use Lookaheads and Lookbehinds in your Regular Expressions