使用javascript中的regex用下划线替换每个前导和尾随空格

时间:2012-10-15 12:37:12

标签: javascript regex string replace whitespace

var str = '  Some string    ';
var output = str.replace(/^\s|\s(?=\s*$)/g , '_');

输出应该如下所示

'___Some string____'

此代码适用于尾随空格,但所有前导空格都只用一个下划线替换。

正在使用的php正则表达式为:/\G\s|\s(?=\s*$)/

4 个答案:

答案 0 :(得分:7)

不漂亮,但完成工作

var str = "  Some string    ";
var newStr = str.replace(/(^(\s+)|(\s+)$)/g,function(spaces){ return spaces.replace(/\s/g,"_");});

答案 1 :(得分:1)

有效 ,但我不喜欢它:

var str = "  some string  ";
var result = str.replace(/^\s+|\s+$/g, function(m) {
    return '________________________________________'.substring(0, m.length);
});

或更灵活:

var str = "  some string  ";
var result = str.replace(/^\s+|\s+$/g, function(m) {
    var rv = '_',
        n;
    for (n = m.length - 1; n > 0; --n) {
        rv += '_';
    }
    return rv;
});

当然,这可以改进。

但我更喜欢epascarello's answer

答案 2 :(得分:0)

另一个reg ex

var str = "  asdf       "
str.replace(/^[ ]+|[ ]+$/g,function(spc){return spc.replace(/[ ]/g,"_")})
//"__asdf_______" 

答案 3 :(得分:0)

使用 String.prototype.repeat() 现在可以将接受的答案改进为

function replaceLeadingAndTrailingWhitespace(text, replace) {
    return text.replace(/^\s+|\s+$/g, (spaces) => replace.repeat(spaces.length));
}