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

输出应如下所示

'___Some string____'

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

用于此的工作 php 正则表达式是: /\G\s|\s(?=\s*$)/

4

4 回答 4

7

不漂亮,但可以完成工作

var str = "  Some string    ";
var newStr = str.replace(/(^(\s+)|(\s+)$)/g,function(spaces){ return spaces.replace(/\s/g,"_");});
于 2012-10-15T12:45:07.703 回答
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 的回答

于 2012-10-15T12:46:06.583 回答
0

另一个正则表达式

var str = "  asdf       "
str.replace(/^[ ]+|[ ]+$/g,function(spc){return spc.replace(/[ ]/g,"_")})
//"__asdf_______" 
于 2013-04-03T13:47:01.380 回答
0

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

function replaceLeadingAndTrailingWhitespace(text, replace) {
    return text.replace(/^\s+|\s+$/g, (spaces) => replace.repeat(spaces.length));
}
于 2021-07-06T12:41:07.117 回答