我正在尝试使用正则表达式进行基本的字符串替换,但我发现的答案似乎没有帮助 - 他们直接回答每个人的独特要求,很少或根本没有解释。
我str = str.replace(/[^a-z0-9+]/g, '');
目前正在使用。但我想做的是允许所有字母数字字符(az 和 0-9)以及“-”字符。
您能否回答这个问题并解释您如何连接表达式。
我正在尝试使用正则表达式进行基本的字符串替换,但我发现的答案似乎没有帮助 - 他们直接回答每个人的独特要求,很少或根本没有解释。
我str = str.replace(/[^a-z0-9+]/g, '');
目前正在使用。但我想做的是允许所有字母数字字符(az 和 0-9)以及“-”字符。
您能否回答这个问题并解释您如何连接表达式。
这应该工作:
str = str.replace(/[^a-z0-9-]/g, '');
之间的所有内容都表明您正在寻找什么
/
在这里划定你的模式,所以你有一个开始和一个结束[]
表示您正在寻找一个特定字符的模式^
表示您希望每个字符都与后面的内容不对应a-z
匹配 'a' 和 'z' 之间的任何字符0-9
匹配 '0' 和 '9' 之间的任何数字(表示任何数字)-
性格g
最后是一个特殊参数,表示您不希望正则表达式在与您的模式匹配的第一个字符上停止,而是在整个字符串上继续然后您的表达式由/
之前和之后分隔。所以在这里你说“每个不是字母、数字或'-'的字符都将从字符串中删除”。
只需更改+
为-
:
str = str.replace(/[^a-z0-9-]/g, "");
您可以将其解读为:
[^ ]
: 不匹配集合[^a-z0-9-]
: 如果不匹配,则匹配a-z
,0-9
或-
/ /g
: 做全局匹配更多信息:
您的字符类(方括号中的部分)表示您要匹配除 0-9 和 az 和 + 之外的任何内容。您没有明确说明要匹配多少个 az 或 0-9,但我认为 + 表示您要替换至少一个字母数字字符的字符串。它应该改为:
str = str.replace(/[^-a-z0-9]+/g, "");
此外,如果您需要匹配大写字母和小写字母,您应该使用:
str = str.replace(/[^-a-zA-Z0-9]+/g, "");
str = str.replace(/\W/g, "");
这将是一个较短的形式