在JavaScript中用下划线替换空格?

Cli*_*ote 327 javascript string

我正在尝试使用此代码用_替换空格,它适用于字符串中的第一个空格,但所有其他空格实例保持不变.谁知道为什么?

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}
Run Code Online (Sandbox Code Playgroud)

Cre*_*esh 645

尝试 .replace(/ /g,"_");

编辑:或者.split(' ').join('_')如果你厌恶RE

编辑:John Resig说:

如果您正在搜索并通过静态搜索替换字符串并使用静态替换,则使用.split("匹配")执行操作的速度更快.join("replace") - 这看似违反直觉,但它设法工作这种方式在大多数现代浏览器中 (在下一版本的Firefox中,有一些变化可以大大提高.replace(/ match/g,"replace")的性能 - 所以之前的声明不会长久.)

  • 截至2015年是`.replace(//g,"_");`比`.split('').join('_')`快. (23认同)
  • .split('').join('_') (12认同)
  • 浏览此@Inez的未来人员有一个链接来测试分裂/加入VS的速度.更换.截至2018年底,替换速度明显加快. (8认同)
  • 而不是`//g`使用`/\/ g` - 都可以在Javascript中使用.后者也适用于CoffeeScript. (7认同)
  • 有没有办法在没有正则表达式的情况下做到这一点? (2认同)

Ada*_*dam 62

试试这个:

key=key.replace(/ /g,"_");
Run Code Online (Sandbox Code Playgroud)

那将是一个全局查找/替换

javascript替换


Ric*_*ich 56

要回答下面Prasanna的问题:

如何在Javascript中用单个空格替换多个空格?

您将使用replace具有不同正则表达式的相同函数.空白\s的表达式是和"1次或更多次"的表达式是+加号,所以你只需用以下代码替换Adam的答案:

key=key.replace(/\s+/g,"_");
Run Code Online (Sandbox Code Playgroud)


Fiz*_*han 25

你可以试试这个

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');
Run Code Online (Sandbox Code Playgroud)

它甚至可以用单个' - '替换多个空格.

  • 可能值得一提:这也会去除制表符其他空白。 (3认同)

Ine*_*nez 17

我为它创建了JS性能测试http://jsperf.com/split-and-join-vs-replace2

  • 一年多以后,在Chrome 32.0.1700.107中运行上述测试.. str.replace()会产生更好的结果(快64%) (4认同)

Ars*_* KV 11

用下划线替换空格

var str = 'How are you';
var replaced = str.split(' ').join('_');
Run Code Online (Sandbox Code Playgroud)

输出: How_are_you


Sat*_*pta 8

替换所有出现的地方

发生这种情况是因为方法的设计方式是在您使用 string 查找匹配项时replace()仅替换第一次出现的情况。检查更换方法。

要替换所有匹配项,您可以使用以下 3 种方法

  1. 在方法中使用带有全局标志的正则表达式replace()

    replace当您将该方法与带标志的正则表达式一起使用时/g,它将替换字符串中的所有匹配项。

        function updateKey()
        {
            var key=$("#title").val();
            key=key.replace(/ /g,"_");
            $("#url_key").val(key);
        }
        // Show case
        let title = "Your document title";
        console.log(title.replace(/ /g,"_"));
    Run Code Online (Sandbox Code Playgroud)

  2. 使用replaceAll方法:

    replaceAll方法将删除所有带有下划线的空格。(使用正则表达式时必须使用全局标志)

        function updateKey()
        {
            var key=$("#title").val();
            key=key.replaceAll(/ /g,"_");
            // key=key.replaceAll(" ","_"); also valid
            $("#url_key").val(key);
        }
        // Show case
        let title = "Your document title";
        console.log(title.replaceAll(/ /g,"_"));
    Run Code Online (Sandbox Code Playgroud)

  3. split使用和方法的组合join

    在空格处分割字符串,并在 join 方法中使用 _ 作为分隔符将其连接起来。

        function updateKey()
        {
            var key=$("#title").val();
            key=key.split(" ").join("_");
            $("#url_key").val(key);
        }
        // Show case
        let title = "Your document title";
        console.log(title.split(" ").join("_"));
    Run Code Online (Sandbox Code Playgroud)