64

我想从字符串中删除所有特殊字符和空格并用下划线替换。字符串是

    var str = "hello world & hello universe";

我现在有这个,它只替换空格:

      str.replace(/\s/g, "_");

我得到的结果是hello_world_&_hello_universe,但我也想删除特殊符号。

我试过这个str.replace(/[^a-zA-Z0-9]\s/g, "_"),但这没有帮助。

4

5 回答 5

154

您的正则表达式[^a-zA-Z0-9]\s/g表示匹配任何不是数字或字母后跟空格的字符。

删除 \s ,如果您希望每个特殊字符都有一个 _ ,您应该得到您所追求的。

var newString = str.replace(/[^A-Z0-9]/ig, "_");

这将导致hello_world___hello_universe

如果您希望它是单个下划线,请使用 + 匹配多个

var newString = str.replace(/[^A-Z0-9]+/ig, "_");

这将导致hello_world_hello_universe

于 2012-10-22T21:36:40.520 回答
5

没有要求精确删除重音(仅特殊字符),但我需要。

此处给出的解决方案有效,但它们不会删除重音:é、è 等。

所以,在做 epascarello 的解决方案之前,你还可以这样做:

var newString = "développeur & intégrateur";

newString = replaceAccents(newString);
newString = newString.replace(/[^A-Z0-9]+/ig, "_");
alert(newString);

/**
 * Replaces all accented chars with regular ones
 */
function replaceAccents(str) {
  // Verifies if the String has accents and replace them
  if (str.search(/[\xC0-\xFF]/g) > -1) {
    str = str
      .replace(/[\xC0-\xC5]/g, "A")
      .replace(/[\xC6]/g, "AE")
      .replace(/[\xC7]/g, "C")
      .replace(/[\xC8-\xCB]/g, "E")
      .replace(/[\xCC-\xCF]/g, "I")
      .replace(/[\xD0]/g, "D")
      .replace(/[\xD1]/g, "N")
      .replace(/[\xD2-\xD6\xD8]/g, "O")
      .replace(/[\xD9-\xDC]/g, "U")
      .replace(/[\xDD]/g, "Y")
      .replace(/[\xDE]/g, "P")
      .replace(/[\xE0-\xE5]/g, "a")
      .replace(/[\xE6]/g, "ae")
      .replace(/[\xE7]/g, "c")
      .replace(/[\xE8-\xEB]/g, "e")
      .replace(/[\xEC-\xEF]/g, "i")
      .replace(/[\xF1]/g, "n")
      .replace(/[\xF2-\xF6\xF8]/g, "o")
      .replace(/[\xF9-\xFC]/g, "u")
      .replace(/[\xFE]/g, "p")
      .replace(/[\xFD\xFF]/g, "y");
  }

  return str;
}

来源:https ://gist.github.com/jonlabelle/5375315

于 2018-07-07T12:15:25.993 回答
4

\s从新的正则表达式中删除它应该可以工作 - 空格已经包含在“除字母数字之外的任何内容”中。

请注意,您可能希望+在 the 之后添加一个,]这样您就不会得到多个下划线的序列。您还可以链接到.replace(/^_+|_+$/g,'')以修剪字符串开头或结尾的下划线。

于 2012-10-22T21:36:28.597 回答
1

如果你有一个文本

var sampleText ="ä_öü_ßÄ_ TESTED Ö_Ü!@#$%^&())(&& + +===.XYZ"

替换所有特殊字符 (!@#$%^&())(&& + += ==.) 而不替换字符(包括变音符号)

使用下面的正则表达式

sampleText = sampleText.replace(/[`~!@#$%^&*() |+-=?;:'",.<>{}[]\/\s]/gi,' ');

输出: sampleText =“ä_öü_ßÄ____TESTED_Ö_Ü_____________________XYZ”

这将用下划线替换所有内容,该下划线作为替换函数的第二个参数提供。您可以根据需要添加任何内容

于 2018-11-23T07:40:35.357 回答
1

var str =“你好世界和你好宇宙”

为了一次性替换空格和符号,我们可以使用下面的正则表达式代码。

str.replaceAll("\\W+","")

注意:\W -> 表示非单词(包括空格/特殊字符)| + -> 一个或多个匹配项

尝试一下!

于 2019-10-14T05:24:56.423 回答