Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除标点符号的Javascript正则表达式_Javascript_Regex - Fatal编程技术网

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

删除标点符号的Javascript正则表达式,javascript,regex,Javascript,Regex,我的正则表达式有问题。我肯定有什么东西没逃走 函数regex(str){ str=str.replace(/(| `` `!|@| | | | | |$$|%| ^和*| \(| \){|}\[| \]| \]|:| \“|”| \?| \/| \ \-| \-| \-| \-| \=/g“) document.getElementById(“innerhtml”).innerhtml=str; } *和+需要转义 函数regex(str){ return str.replace(/(~(

我的正则表达式有问题。我肯定有什么东西没逃走

函数regex(str){
str=str.replace(/(| `` `!|@| | | | | |$$|%| ^和*| \(| \){|}\[| \]| \]|:| \“|”| \?| \/| \ \-| \-| \-| \-| \=/g“)
document.getElementById(“innerhtml”).innerhtml=str;
}


*
+
需要转义

函数regex(str){
return str.replace(/(~(124; `)!(124;@| | | | | | | | | | | | | | |$$|%| | | | | | | | | | | | | | | | | | | | | | | | | | | |
}
var testStr='test@./|)这是
document.write(“之前:”+testStr)
document.write(“
之后:”+regex(testStr))
上接受的答案不包括ASCII范围内的所有标点字符。(不过,对公认答案的评论确实如此)

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

/[~`!@#$%^&*(){}\[\];:"'<,.>?\/\\|_+=-]/g
/[~`.@$%^&*({}\[\];:“?\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\+=-]/g
在字符类中,要匹配文字字符:

  • ^
    不需要转义,除非它位于字符类的开头
  • -
    应放在字符类的开头(在否定字符类中,
    ^
    之后)或字符类的结尾
  • ]
    必须转义才能指定为文字字符。
    [
    不需要转义(但我还是转义它,因为有些语言要求在字符类内转义
    [
  • $
    *
    +
    {
    }
    在字符类中失去了特殊意义
在RegExp literal中,
/
必须转义


在RegExp中,由于
\
是转义字符,如果您想指定一个文本
\
,您需要转义它
\

为什么不采用白名单方法,只匹配字母数字字符?我需要计算所有重音字符,所以不确定如何处理白名单方法。@blasko白名单方法将是slo我们可以看到,
{
}
*
+
…顺便说一下,
str.replace(/[~
\!@$%^&*()\{\}[];:“'\?\/\\\\\\\\\\\+=]+/g,”)`似乎有效-不确定哪一个更容易read@Daniel为什么不尝试转义所有内容,转义不会造成伤害。链接副本上的答案更好。将字符放入
[匹配组]
比放入
a或b
更有意义。