用下划线替换空格?


352

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

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

Answers:


693

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

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

编辑约翰·雷西格说

如果您要通过静态搜索和静态替换来搜索和替换字符串,则使用.split(“ match”)。join(“ replace”)进行操作的速度更快,这似乎违反直觉,但可以正常工作在大多数现代浏览器中都是这样。(在下一版本的Firefox中,将进行一些更改以显着提高.replace(/ match / g,“ replace”)的性能-因此,前面的声明将不会持续很长时间。)


1
没有正则表达式,有没有办法做到这一点?
点击在2009年

14
.split('').join('_')

7
而不是/ /g使用/\ /g-都可以使用Javascript。后者也可以在CoffeeScript中使用。
汤姆·

27
截至2015年,.replace(/ /g,"_");速度比.split(' ').join('_')
加布里埃尔·托米斯卡

8
将来浏览此@Inez的人都有一个链接,可以测试VS的拆分/合并速度。更换。截至2018年末,更换速度明显加快。
瑞克斯


58

要回答普拉桑纳的以下问题:

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

您将使用相同的函数replace使用不同的正则表达式。空格\s的表达式为,而“ 1次或多次”的表达式为+加号,因此您只需将亚当的答案替换为以下内容:

key=key.replace(/\s+/g,"_");

30

你可以试试这个

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');

它甚至将多个空格替换为单个“-”。


3
可能值得一提:这也会去除制表符其他空白。
Berry M.

18

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


1
如今看来,替换是更好的总体选择
Houman 2012年

Kave-什么?尽管并非所有浏览器都是平等的,但平均而言,拆分/合并要好得多。实际上,在许多现代浏览器中,它的音调更好!感谢Inez进行此设置!
大卫·霍布斯

4
一年多以后,现在在Chrome 32.0.1700.107中运行了上述测试。str.replace()产生了更好的结果(速度提高了64%)
jenovachild 2014年

12

用下划线替换空格

var str = 'How are you';
var replaced = str.split(' ').join('_');

输出: How_are_you


3

我知道这很旧,但是我没有看到有人提到扩展String prototype

String.prototype.replaceAll = function(search, replace){
    if(!search || !replace){return this;} //if search entry or replace entry empty return the string
    return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};

1
您没有看到任何人这样做,因为这是一个糟糕的主意。进一步了解其他SO问题。

2

只需使用replace

var text = 'Hello World';
    
new_text = text.replace(' ', '_');
    
console.log(new_text);


3
这将仅替换第一空间,而不是那之后
Narendra
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.