javascript正则表达式的正向前瞻

use*_*914 21 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

zx8*_*x81 34

正则表达式is(?= all)匹配的字母is,但只有当他们被立即其次是字母all

同样,正则表达式is(?=there)匹配的字母is,但只有当他们被立即其次是字母there

如果你将两者组合在一起is(?= all)(?=there),你就试图匹配这些字母is,但前提是它们同时紧跟着字母all 字母there...... 这是不可能的.

如果你想匹配的字母is,但只有当他们被立即跟随要么由字母all 字母there,那么你可以使用:

is(?= all|there)

如果,另一方面,你想匹配的字母is,但只有当他们被立即其次是字母all there,那么你可以使用:

is(?= all there)

如果我想is跟随allthere,但在字符串中的任何地方怎么办?

然后你可以使用类似的东西 is(?=.* all)(?=.*there)

理解前瞻的关键

结果的关键是要理解前瞻是一个断言,它检查某些东西是否跟随,或者先于字符串中的特定位置.这就是我立刻加粗的原因.以下文章应该消除任何混淆.

参考

掌握前瞻和外观


hwn*_*wnd 8

正向前查找失败的,事实there不会立即跟随.

is(?=there) # matches is when immediately followed by there
Run Code Online (Sandbox Code Playgroud)

要匹配 if there跟在字符串中的某个位置,你会这样做:

is(?=.*there) 
Run Code Online (Sandbox Code Playgroud)

说明:

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

演示

我建议的详细教程:如何在正则表达式中使用Lookaheads和Lookbehinds