繁体   English   中英

在Javascript中用下划线替换初始空格

[英]Replace initial spaces with underscores in Javascript

用(例如)下划线替换空格很容易:

y = x.replace(/ /g, '_');

删除前导空格也很容易:

y = x.replace(/^ +/, '');

但有没有一种很好的方法只用下划线替换初始空间?

TJ Crowder的答案肯定比这种方法更好,但我想我会添加它,因为在所有主流浏览器中支持lookbehinds只是时间问题。 在撰写此答案时,根据EMCA TC39的regexp lookbehind提案 ,Chrome 62和XS(2018年1月17日更新)中提供的V8引擎是JavaScript中可变长度lookbehinds的唯一实现。

请注意下面的正则表达式包含尾随空格。 如果你有Chrome 62+(或者如果你将来;另一个浏览器支持可变长度的外观),你可以在这里测试正则表达式

(?<=^ *) 

 const regex = /(?<=^ *) /g const str = ' something is here' console.log(str.replace(regex, '_')) 

我想用下划线替换每个前导空格

要在当前规范中只使用一个replace调用来执行此操作,*您需要使用函数调用版本的replace来执行此操作,只要匹配的空格序列创建一个下划线字符串:

y = x.replace(/^ +/, function(m) {
    return "_".repeat(m.length);
});

或者使用ES2015 +箭头功能:

y = x.replace(/^ +/, m => "_".repeat(m.length));

实例:

 const x = " four spaces"; const y = x.replace(/^ +/, m => "_".repeat(m.length)); console.log(y); 

String.prototype.repeat在ES2015加入。 如果您需要支持过时的JavaScript引擎, MDN页面会有一个您可以使用的polyfill。


*但是使用ES2018的一个功能来看ctwheels的回答 :Look-behinds。 五,聪明!

将两个正则表达式组合在一起没有任何问题:

 var x = ' hello world'; var y = x.replace(/^ +/, u => u.replace(/ /g, "_")); console.log(y); // Outputs: ____hello world 

以上的长手版本将是:

var y = x.replace(/^ +/, function (u) { return u.replace(/ /g, "_"));

本质上,外部正则表达式/替换获取初始空格,内部正则表达式/替换仅替换具有下划线的那些空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM