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

Dan*_*ams -3 javascript regex

我的正则表达式有问题.我确定有些东西没有正确逃脱.

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

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

Joh*_*son 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))
Run Code Online (Sandbox Code Playgroud)

  • 链接副本的答案更好.将字符放在"[匹配组]"中比将它们放在"a |或| b"中更有意义. (3认同)

nha*_*tdh 5

提议的重复项问题的可接受答案未涵盖ASCII范围内的所有标点符号。(不过,对接受的答案的评论确实如此)。

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

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

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

  • ^ 除非在字符类的开头,否则不需要转义。
  • -应该放在字符类的开头(在^否定的字符类中的后面)或字符类的末尾。
  • ]必须转义以指定为文字字符。[不需要转义(但是我还是习惯了转义,因为某些语言需要[在字符类中转义)。
  • $*+?(){}|.失去字符类中仍然具有特殊意义。

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

在RegExp中,由于\是转义字符,所以如果要指定文字\,则需要对其进行转义\\