29

我正在尝试使用正则表达式进行基本的字符串替换,但我发现的答案似乎没有帮助 - 他们直接回答每个人的独特要求,很少或根本没有解释。

str = str.replace(/[^a-z0-9+]/g, '');目前正在使用。但我想做的是允许所有字母数字字符(az 和 0-9)以及“-”字符。

您能否回答这个问题并解释您如何连接表达式。

4

4 回答 4

63

这应该工作:

str = str.replace(/[^a-z0-9-]/g, '');

之间的所有内容都表明您正在寻找什么

  1. /在这里划定你的模式,所以你有一个开始和一个结束
  2. []表示您正在寻找一个特定字符的模式
  3. ^表示您希望每个字符都与后面的内容不对应
  4. a-z匹配 'a' 和 'z' 之间的任何字符
  5. 0-9匹配 '0' 和 '9' 之间的任何数字(表示任何数字)
  6. -性格
  7. g最后是一个特殊参数,表示您不希望正则表达式在与您的模式匹配的第一个字符上停止,而是在整个字符串上继续

然后您的表达式由/之前和之后分隔。所以在这里你说“每个不是字母、数字或'-'的字符都将从字符串中删除”。

于 2012-12-05T15:22:07.293 回答
9

只需更改+-

str = str.replace(/[^a-z0-9-]/g, "");

您可以将其解读为:

  1. [^ ]: 不匹配集合
  2. [^a-z0-9-]: 如果不匹配,则匹配a-z0-9-
  3. / /g: 做全局匹配

更多信息:

于 2012-12-05T15:20:36.733 回答
1

您的字符类(方括号中的部分)表示您要匹配除 0-9 和 az 和 + 之外的任何内容。您没有明确说明要匹配多少个 az 或 0-9,但我认为 + 表示您要替换至少一个字母数字字符的字符串。它应该改为:

str = str.replace(/[^-a-z0-9]+/g, "");

此外,如果您需要匹配大写字母和小写字母,您应该使用:

str = str.replace(/[^-a-zA-Z0-9]+/g, "");
于 2012-12-05T15:21:42.283 回答
0
str = str.replace(/\W/g, "");

这将是一个较短的形式

于 2021-12-16T21:42:45.287 回答