用于清除字符串值的Javascript正则表达式
我想用js从字符串中删除无效字符 我的正则表达式目前如下所示:用于清除字符串值的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-
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