Javascript正则表达式删除标点符号

时间:2015-08-03 00:15:19

标签: javascript regex

我的正则表达式有问题。我确信有些东西没有正常逃脱。

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');">

2 个答案:

答案 0 :(得分:5)

*+需要转义。

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))

答案 1 :(得分:4)

the question proposed duplicate上接受的答案并不涵盖ASCII范围内的所有标点字符。 (尽管如此,对已接受答案的评论也是如此)。

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

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

在字符类中,匹配文字字符

  • ^不需要转义,除非它位于字符类的开头。
  • -应放在字符类的开头(在否定字符类中的^之后)或字符类的末尾。
  • ]必须转义才能指定为文字字符。 [不需要被转义(但我无论如何都要逃避它,作为一种习惯,因为某些语言需要[在字符类中进行转义。)
  • $*+?(){}|.在角色类中失去了特殊意义。

在RegExp文字中,必须转义/

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