【问题标题】:Javascript regular expression: match any not-word except allowed special charactersJavascript正则表达式:匹配除允许的特殊字符外的任何非单词
【发布时间】:2015-02-26 01:12:16
【问题描述】:

我一直在尝试找到一种方法来做到这一点大约一个小时,但也许我的措辞不正确。

我想匹配除 -_+#& 之外的所有特殊字符!

示例集:

!@#$%^&µ*&+=_-()}{~`¡€$*

正则表达式应该选择:

@$%^µ*=()}{~`¡€$*

【问题讨论】:

    标签: javascript regex escaping special-characters regex-negation


    【解决方案1】:

    上面Andrew的回答会选择一个字符,你可能希望匹配多个字符:

    /([^\w!&+=_-]+)/g
    

    编辑:

    在验证的情况下(OP 可能会这样做),这无关紧要,但如果您正在清理这些字符的字符串 - 那就是您想要匹配一个或多个的时候。

    你还用 \w 删除字母数字字符,我不确定你是否想要。

    实际上,您只需要特殊字符,这是正确的!

    【讨论】:

    • 我只希望匹配 1 个字符的原因是,这是一个函数中的测试,如果存在非法字符 function(){ if(regex.test(string) {返回假'}}
    【解决方案2】:

    在发布此消息一分钟后,我发现了解决方案。

    /([^\w!&+=_-])/g

    http://www.regexr.com/3a50t

    为了将来参考,如果您希望排除除一组特定特殊字符之外的所有特殊字符,您可以:

    /([^\w__theSpecialCharactersYouWantToAllow__])/g

    如果我错了,请告诉我。

    【讨论】:

      【解决方案3】:

      这也可以:)

      var regex = new RegExp(/([^-_+#&!])/g),
          str = "!@#$%^&µ*&+=_-()}{~`¡€$*";
      
      console.log(str.match(regex));
      

      【讨论】:

      • 最初,我否决了这个答案,因为很久以前我误读了这个:goo.gl/xPBv4F 意味着你不应该将包装器对象用于原始类型——没有考虑到你可能是类型铸造。话虽如此,您的打印功能将尝试打印您的比赛结果......就像使用实际打印机一样。也许你的意思是 console.log?
      • 我在命令行上使用rhino 运行了这个,当我使用console.log 时它变得很麻烦。我只在 node.js 应用程序中看到console.log,你的问题没有说明它是什么风格的 JavaScript。无论如何,打印出结果是微不足道的。
      • console.log 是浏览器的内置方法 - 如果您在 chrome 中打开开发工具(cmd/ctrl + shift + I),然后按 esc,然后键入 console.log('记录消息');控制台将记录一条消息。如果遇到错误,只需将其添加到脚本顶部: var console = { log: function(thing){ return thing; }}
      猜你喜欢
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多