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

出力は次のようになります

'___Some string____'

このコードは末尾の空白に対しては正常に機能しますが、先頭の空白はすべて1つのアンダースコアに置き換えられます。

このために機能する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 に答える