我的正则表达式有问题。我确信有些东西没有正常逃脱。
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');">
答案 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中,由于\
是转义字符,如果要指定文字\
,则需要将其转义\\
。