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

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

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

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

编辑:或.split(' ').join('_'),如果你讨厌REs

编辑: John Resig说:

如果你在搜索和替换 通过一个字符串进行静态搜索 而一个静态替换它更快 使用 .split(“匹配”). join(“替换”) 这似乎违反直觉,但是 大多数情况下都是这样 现代浏览器。(有变化 在适当的地方大大改善 .replace(/match/g, “替换”)的下一个版本 Firefox -前面的陈述 这种情况不会持续太久。)

试试这个:

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

它会做全局查找/替换

javascript replace

下面来回答Prasanna的问题:

如何替换多个空格

你可以用不同的正则表达式来使用相同的函数replace。空格的表达式是\s,而“1次或多次”的表达式是+(加号),所以你只需将Adam的答案替换为以下内容:

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

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

你可以试试这个

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

它甚至会用单个的“-”替换多个空格。

我知道这是旧的,但我没有看到任何人提到扩展字符串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.
};

取代带下划线的空格

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

输出: How_are_you

使用replace:

var text = 'Hello World';
    

new_text = text.replace(' ', '_');
    

console.log(new_text);

const updateKey = key => console.log(key.split(' ').join('_'));
updateKey('Hello World');

替换所有事件

这是因为replace()方法被设计成只替换第一次出现的当您使用字符串查找匹配时。检查更换方法。

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

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

    当你使用带有/g标志的regex的replace方法时,它会替换字符串中所有匹配的出现。

        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,"_"));

  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,"_"));

  3. 使用splitjoin方法的组合:

    在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("_"));

$(function() {
$('#title').keyup(function() {
var value = $(this).val().toLowerCase();
$('#url_key').val(value.split(' ').join('_'));
}).keyup();
});

——或者你可以用:

$(function() {
$('#title').keyup(function() {
var value = $(this).val().toLowerCase();
$('#url_key').val(value.replace(/ /g,"_"));
}).keyup();
});