【问题标题】:Problem with regex lookahead in javascriptjavascript中的正则表达式前瞻问题
【发布时间】:2011-06-29 17:37:15
【问题描述】:

我只在所有以空格分隔的单词都长于 3 个单词字符时才尝试匹配(3 个单词字符是强制性的,abc* 是正确的,但 ab* 不是)。这是我的测试:

<html>
        <body>
                <script>
                var re = /(?!(\W|^)\w{0,2}(\W|$)).*/i;
                var texts = new Array("ab","ab*","abc de*", "ab* def");
                for (textindex in texts)
                {
                        var text = texts[textindex];
                        var matched = re.test(text);
                        document.write(matched + "<br/>")
                }
                </script>
        </body>
</html>

所有文本都匹配,但我认为不应该匹配。也许我误解了前瞻工作原理的一些基本原理。

【问题讨论】:

    标签: javascript regex lookahead regex-lookarounds


    【解决方案1】:

    要测试的简单正则表达式是:

    /^(\s?\S{3,})+$/
    

    至于为什么你的正则表达式不起作用,你的否定前瞻只是意味着“这在这个确切的点上不存在”,所以无论你的输入是什么,你都会在 行尾至少。

    【讨论】:

    • 但是那个不匹配 "abc*" 或 "abcd* def*" 并且两者都应该匹配。
    • 好的,我在最后添加了 \S*,至少这与我所有的测试模式相匹配。谢谢!所以最终的答案应该是:/^(\s?\w{3,}\S*)+$/
    • \w 是对的,我需要 3 个强制单词字符,然后是任何非空格(在我的示例中为星号)。 “ab*”不应该匹配。 (也许这在最初的问题中并不清楚,我会澄清这一点。
    • 我发现您对我的前瞻的解释并不有趣,但我不明白。如果前瞻总是在行尾匹配,我看不出你如何得到一个有效的。你能详细说明一下吗?
    猜你喜欢
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多