【问题标题】:What would be the JavaScript pattern to match anything except a given string? [duplicate]除了给定字符串之外,匹配任何内容的 JavaScript 模式是什么? [复制]
【发布时间】:2013-04-12 08:32:13
【问题描述】:

我需要确保给定的字符串不是“选择值”。就是这样,除了这个确切的字符串之外,其他任何东西都应该与模式匹配。

我在http://www.regular-expressions.info/javascriptexample.html 上环顾四周并尝试了许多组合,但似乎没有任何效果。

我不能否定测试,模式需要全部完成,因为我将把它提供给表单验证框架。如果选择包含这个文本,我会返回一个错误,等等。所以模式必须匹配其他任何东西,除了这个确切的字符串,

我尝试了很多东西,

(?!Select an account)
!(Select an account)
!(^(Select an account)$)

等等...显然我不明白其中一些机制是如何工作的。我得到了“开始于”和“结束于”,但我似乎没有找到一个简单的否定运算符。

由于某种原因,我到处寻找正则表达式的解释,我没有得到这个简单的用例,也许它并不常见。

我怎样才能做到这一点?

谢谢!

【问题讨论】:

    标签: javascript regex match


    【解决方案1】:

    我相信这是在问类似的问题:

    Regular Expressions and negating a whole character group

    在您的情况下,您可以使用类似

        ^(?!Select a value).*$
    

    这将匹配不以“选择一个值”开头的所有内容。

    【讨论】:

    • 太棒了!我知道我很接近,但无法弄清楚缺少什么...... .*$ 成功了!谢谢!!
    【解决方案2】:

    不要考虑否定的正则表达式,而是做一个肯定的并否定条件:

    if (! /^Select an account$/.test(mystring)) {
      // String is not "Select an account"
    }
    

    但无论如何您都不需要正则表达式:

    if (mystring != 'Select an account') {
      // String is not "Select an account"
    }
    

    或者如果你想要“包含”:

    if (mystring.indexOf('Select an account') == -1) {
      // String does not contain "Select an account"
    }
    

    【讨论】:

    • 哦,就像我说的我不能使用它。我会将正则表达式模式提供给表单验证框架,因此我不能否定测试或做显而易见的事情。我实际上不会执行测试......只需要一个简单的正则表达式来匹配给定的字符串,仅此而已。一定有办法做到这一点......
    【解决方案3】:

    我可能没有正确理解这一点。这样不行吗?

    if (string != "Select a value") {
        //code here
    }
    

    我不知道你为什么需要正则表达式来做到这一点,这就是为什么我担心我可能不明白你的问题是什么。

    【讨论】:

    • 哦,谢谢 Vijay,我得到了上面的答案,但我不能这样做的原因是因为我会将正则表达式模式提供给以正则表达式作为输入的表单验证框架。我不会自己做检查,不想对框架的代码进行调整。
    【解决方案4】:

    如果您在 HTML5 表单验证中处理正则表达式,并且输入的模式属性比一个确切的字符串更复杂,则另一种解决方案如下 (javascript):

    function findAllNotPattern(inputField) {
        var allBut1 = inputField.getAttribute("pattern")
        var allBut2 = allBut1.slice(0, 1) + "^" + allBut1.slice(1)
        var allButRe = new RegExp(allBut2, "g")
        return allButRe
    }
    

    如果你想在纯 javascript 中运行它,你会使用:

    findAllNotPattern(document.getElementById("inputFieldId"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      相关资源
      最近更新 更多