Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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,我想用js从字符串中删除无效字符 我的正则表达式目前如下所示: var newString = oldString.replace(/([^a-z0-9 ]+)/gi, ''); i、 e查找除a-z或0-9之外的任何内容以及独立于大小写的空格,并替换为零-但是,我还希望允许下划线()、连字符(-)和点() 我试图更新我的正则表达式,如下所示,但它没有按预期工作-在我做了更改后,我发现带括号()的字符串没有被删除 var newString = oldString.replace(/([^a-

我想用js从字符串中删除无效字符

我的正则表达式目前如下所示:

var newString = oldString.replace(/([^a-z0-9 ]+)/gi, '');
i、 e查找除a-z或0-9之外的任何内容以及独立于大小写的空格,并替换为零-但是,我还希望允许下划线(
)、连字符(
-
)和点(

我试图更新我的正则表达式,如下所示,但它没有按预期工作-在我做了更改后,我发现带括号()的字符串没有被删除

var newString = oldString.replace(/([^a-z0-9 .-_]+)/gi, '');

我错过了一些简单的东西吗?

你必须避开点和连字符:

var newString = oldString.replace(/([^a-z0-9 \.\-_]+)/gi, '');
-
放在末尾,因为它在
[]
之间形成一个范围。现在它正在形成一个介于
之间的范围。或者你也可以逃避它

 var newString = oldString.replace(/([^a-z0-9 ._\-]+)/gi, '');

将文字破折号放在字符类的最后,或用反斜杠将其转义。现在,它允许的ASCII范围为
.

var newString = oldString.replace(/[^a-z0-9 ._-]+/gi, '');

旁注:除非存储某个匹配项,否则不需要括号(如果括号包含整个匹配项,则也不需要括号,因为
\0
指的是整个匹配项)

使用反斜杠进行转义

这应该行得通

.replace(/([^a-z0-9 \.\_\-]+)/gi, '');
还有。。。 您还可以使用\w表示字母、数字和未重排序

[a-zA-Z0-9_] == \w

你不必在字符类中转义一个点。实际上,点在字符范围中没有意义。破折号是罪魁祸首。在[]之内你不需要逃走[]你不需要逃走。下面是vks提出的一个很好的观点!可能正在使用-将使用它作为范围,因此您可能需要\for-但不是for。我同意您的观点@wishy即使不是根据流行意见或现实情况,但如果您这样说也可以。。。我总是使用regex101来测试任何假设。请参阅下面的链接。为了@benembery的例子,我把它改成了多行,谢谢你的链接,真的很有用,以前从未见过
[a-zA-Z0-9_] == \w