用(例如)下划线替换空格很容易:
y = x.replace(/ /g, '_');
删除前导空格也很容易:
y = x.replace(/^ +/, '');
但是有一种很好的方法可以用下划线替换初始空格吗?
答案 0 :(得分:3)
T.J. Crowder's answer肯定比这种方法更好,但我想我会添加它,因为在所有主流浏览器中支持lookbehinds只是时间问题。在撰写本回答时,Chrome 62和XS(2018年1月17日更新)中提供的V8引擎是EMCA TC39's regexp lookbehind proposal中JavaScript中可变长度lookbehinds的唯一实现。
注意下面的正则表达式包含一个尾随空格。如果您使用Chrome 62+(或者如果您将来使用;另一种支持可变长度的外观浏览器的浏览器),您可以test the regex here。
(?<=^ *)
const regex = /(?<=^ *) /g
const str = ' something is here'
console.log(str.replace(regex, '_'))
&#13;
答案 1 :(得分:1)
我想用下划线替换每个前导空格
要在当前规范中只进行一次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);
ES2015中添加了
String.prototype.repeat
。如果您需要支持过时的JavaScript引擎,the MDN page有一个可以使用的polyfill。
*但see ctwheels' answer使用ES2018的功能:后视。 V.聪明!
答案 2 :(得分:1)
将两个正则表达式组合在一起并没有错:
var x = ' hello world';
var y = x.replace(/^ +/, u => u.replace(/ /g, "_"));
console.log(y); // Outputs: ____hello world
&#13;
以上的长手版本将是:
var y = x.replace(/^ +/, function (u) { return u.replace(/ /g, "_"));
基本上,外部正则表达式/替换获取初始空格,内部正则表达式/替换仅替换具有下划线的空格。