【问题标题】:Positive lookahead with javascript regexjavascript 正则表达式的积极前瞻
【发布时间】:2014-06-15 05:51:24
【问题描述】:

我被正则表达式搞砸了。我发现这对我来说很难。我见过这样的代码:

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)/ 这样添加时,它没有输出任何东西。我是正则表达式的新手..希望你们能帮助理解正则表达式中的积极前瞻..我遵循了许多对我没有帮助的教程。

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

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

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

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

    如果您在is(?= all)(?=there) 中组合这两个字母,您将尝试匹配字母is,但前提是它们立即 后跟字母all AND 字母there 同时... 这是不可能的。

    如果您想匹配字母 is,但前提是它们立即后跟 either 字母 all 字母there,那么你可以使用:

    is(?= all|there)

    另一方面,如果您想匹配字母 is,但前提是它们立即后跟字母 all there,那么您可以使用:

    is(?= all there)

    如果我希望 is 后跟 allthere,但在字符串中的任何位置怎么办?

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

    理解前瞻的关键

    lookarounds 的关键是要理解,lookahead 是一个断言,它检查某些内容是否在在字符串中的特定位置之后或之前。这就是我立即加粗的原因。以下文章应该可以消除任何混淆。

    参考

    Mastering Lookahead and Lookbehind

    【讨论】:

    • 很抱歉我仍然没有得到“但只有当它们后面跟着所有字母时”..我怎么知道它是否被跟随
    • @user3718914 Lookarounds 一开始有点混乱。我强烈建议您阅读我链接的那篇文章,因为它非常清楚,并且可能会比我们在这里尝试写另一篇文章做得更好。 :)
    • @user3718914 同样在答案中我添加了粗体字立即我认为这会有所帮助。
    • 是的,我已经接受了答案..这是否也取决于字符串的位置??..我的意思是在前瞻的情况下
    • @user3718914 is this depends on the position of the string too 你能解释一下你的意思吗?不确定我是否理解您的问题。
    【解决方案2】:

    Positive Lookahead 失败,因为 there 没有立即跟随 is

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

    如果 there 在字符串中的某个位置后匹配 is,您可以:

    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

    【讨论】:

    • 很抱歉,我仍然没有得到“但只有当它们后面跟着所有字母时”..我怎么知道它是否被跟随
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多