【问题标题】:Remove special symbols and extra spaces and replace with underscore using the replace method使用replace方法删除特殊符号和多余空格并替换为下划线
【发布时间】:2012-10-22 21:34:18
【问题描述】:

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

    var str = "hello world & hello universe";

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

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

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

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您的正则表达式[^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

    【讨论】:

    • 这适用于问题中提供的单个示例,但在一般情况下会中断。非英语语言中有许多字符不是“特殊符号”,但不在 A-Z 范围内。这可能值得一提。
    • 用gi替换ig,我的eslintprettier/prettier说
    【解决方案2】:

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

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

    所以,在做 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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 既然可以在第一个正则表达式中添加+,为什么还要单独调用replace?
      • 因为...好点。我在想别的东西,我猜。不过,您仍然可以链接 trim-like 正则表达式。
      【解决方案4】:

      如果你有一个文本

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

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

      使用下面的正则表达式

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

      输出: sampleText = "ä_öü_ßÄ____TESTED_Ö_Ü_______XYZ"

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

      【讨论】:

        【解决方案5】:

        var str = "你好世界和你好宇宙"

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

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

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

        试试吧!

        【讨论】:

          猜你喜欢
          • 2020-03-16
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-29
          • 2020-09-05
          • 2023-03-19
          相关资源
          最近更新 更多