【问题标题】:Exact string negation in javascript regexpressionsjavascript正则表达式中的确切字符串否定
【发布时间】:2015-03-11 13:14:44
【问题描述】:

这个问题更多是为了满足我的好奇心,而不是真正需要帮助,但我同样会感谢你的帮助,因为它让我发疯。

我正在尝试使用 Javascript 正则表达式否定一个确切的字符串,其想法是排除包含字符串“www”的 URL。例如这个列表:

http://www.example.org/
http://status.example.org/index.php?datacenter=1
https://status.example.org/index.php?datacenter=2
https://www.example.org/Insights
http://www.example.org/Careers/Job_Opportunities
http://www.example.org/Insights/Press-Releases

为此,我可以成功使用以下正则表达式:

/^http(|s):..[^w]/g

这可以正常工作,但是虽然我可以做一个肯定的匹配,但我不能做这样的事情:

/[^www]/g  or  /[^http]/g

排除包含确切字符串 www 或 http 的行。我曾尝试过像这样臭名昭著的“消极前瞻”:

/*(?: (?!www).*)/g 

但这也不起作用,或者我无法在线测试,它在 Notepad++ 中也不起作用。

如果我使用 Perl、Grep、Awk 或 Textwrangler,我会简单地这样做:

!www   OR  !http

这样就完成了。

所以,我的问题显然是:在 Javascript 中做这种事情的正确方法是什么?这是否取决于正则表达式解析器(我似乎理解?)。

感谢您的任何回答;)

【问题讨论】:

    标签: javascript regex string regex-negation exact-match


    【解决方案1】:

    您需要在开头添加一个否定的前瞻。

    ^(?!.*\bwww\.)https?:\/\/.*
    

    DEMO

    (?!.*\bwww\.) 否定前瞻断言我们要匹配的字符串不会包含 www.\b 表示单词字符和非单词字符之间匹配的单词边界。如果没有\b,您的正则表达式中的www. 将匹配foowww. 中的www.

    【讨论】:

    • 哇,非常感谢!现在我需要了解它为什么有效。我的意思是,我可以“阅读”它,我看到有一个负前瞻和一个单词边界......现在我看到 W3C 学校的参考非常有限,这里还有更多:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Cool,THX ,对于像我这样的 bash 人来说,需要一些时间来适应这种正则表达式的逻辑。
    • 嗨阿维纳什:我确实理解它慢慢阅读它,一步一步。我的意思是我需要学习“说”和“想”它,就像我用来思考和说 Perl 或 Bash 正则表达式一样。这就像学习一门新语言;)感谢您的关注!
    【解决方案2】:

    在输入字符串的每个位置否定“www”:

    var a = [
        'http://www.example.org/',
        'http://status.example.org/index.php?datacenter=1',
        'https://status.example.org/index.php?datacenter=2',
        'https://www.example.org/Insights',
        'http://www.example.org/Careers/Job_Opportunities',
        'http://www.example.org/Insights/Press-Releases'
    ];
    a.filter(function(x){ return /^((?!www).)*$/.test(x); });
    

    所以在每个位置检查 'www' 不匹配,然后匹配 任何字符 (.)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2016-01-24
      相关资源
      最近更新 更多