【问题标题】:Javascript regex to remove punctuation [duplicate]Javascript正则表达式删除标点符号[重复]
【发布时间】:2015-10-25 00:06:21
【问题描述】:

我的正则表达式有问题。我确定有些东西没有正确转义。

function regex(str) {
  
  str = str.replace(/(~|`|!|@|#|$|%|^|&|*|\(|\)|{|}|\[|\]|;|:|\"|'|<|,|\.|>|\?|\/|\\|\||-|_|+|=)/g,"")
  document.getElementById("innerhtml").innerHTML = str;
  
 }
<div id="innerhtml"></div>

<p><input type="button" value="Click Me" onclick="regex('test @ . / | ) this');">

【问题讨论】:

  • 为什么不采用白名单的方式,只匹配字母数字字符?
  • 我需要统计所有重音字符,所以不知道如何处理白名单方法。
  • @blasko 白名单方法会更慢。
  • 我可以看到{}*+ ....顺便说一句str.replace(/[~\!@#$%^&*()\{\}[] ;:"'\?\/\\\|\-_\+=]+/g,"")` 似乎有效 - 不确定哪个更容易阅读
  • @Daniel 为什么不尝试逃避一切,逃避并没有什么坏处。

标签: javascript regex


【解决方案1】:

*+ 需要转义。

function regex (str) {
    return str.replace(/(~|`|!|@|#|$|%|^|&|\*|\(|\)|{|}|\[|\]|;|:|\"|'|<|,|\.|>|\?|\/|\\|\||-|_|\+|=)/g,"")
}

var testStr = 'test @ . / | ) this'
document.write('<strong>before: </strong>' + testStr)
document.write('<br><strong>after: </strong>' + regex(testStr))

【讨论】:

  • 链接副本的答案更好。将字符放在[matching group] 中比放在a|or|b 中更有意义。
【解决方案2】:

the question proposed duplicate 上接受的答案并未涵盖 ASCII 范围内的所有标点符号。 (不过,对已接受答案的评论确实如此)。

编写此正则表达式的更好方法是将字符放入字符类中。

/[~`!@#$%^&*(){}\[\];:"'<,.>?\/\\|_+=-]/g

在一个字符类中,要匹配文字字符

  • ^ 不需要转义,除非它位于字符类的开头。
  • - 应放置在字符类的开头(在否定字符类中的 ^ 之后)或字符类的末尾。
  • ] 必须转义才能指定为文字字符。 [ 不需要转义(但我还是习惯性地转义它,因为某些语言需要在字符类中转义 [)。
  • $*+?(){}|.在字符类中失去了它们的特殊含义。 >

在 RegExp 文字中,/ 必须被转义。

在RegExp中,由于\是转义字符,如果要指定文字\,则需要将\\转义。

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 2013-05-12
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多