我一直搞乱了正则表达式..我觉得我很难......我看过一个代码:
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跟随all和there,但在字符串中的任何地方怎么办?
然后你可以使用类似的东西 is(?=.* all)(?=.*there)
理解前瞻的关键
结果的关键是要理解前瞻是一个断言,它检查某些东西是否跟随,或者先于字符串中的特定位置.这就是我立刻加粗的原因.以下文章应该消除任何混淆.
参考
在正向前查找失败的,事实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