我一直搞乱了正则表达式..我发现对我来说很难......我见过像这样的代码:
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)/
时,它没有输出任何东西。我是正规表达的新手..希望你们能帮助我们理解正则表达式中的积极前瞻。我已经按照许多教程对它没有帮助。
希望你们能帮助我。谢谢!
答案 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)
跟is
和all
关注,但字符串中的任何位置,该怎么办?
然后您可以使用there
理解前瞻的关键
结论的关键是要明白,前瞻是一个断言,它会检查某些内容,或者在字符串中的特定位置之前。这就是为什么我立即加强 。以下文章应该消除任何混淆。
<强>参考强>
答案 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