2

在这种特定情况下,我想用下划线替换字符串开头和结尾的所有空格:

var a = '   ## ## #  ';
console.log(myReplace(a)); // prints ___## ## #__

即:第一个 # 之前字符串开头的所有空格和最后一个 # 之后的所有空格,其他所有内容(包括字符串中间的空格)保持不变。

我最初的想法是使用两个 Reg Exp,一个用于问题的每个部分。

但是,我无法获得第一个,我不确定是否可以使用 JS 正则表达式来做我想做的事情。

str.replace(/^\ /g, '_'); // replaces only the first space
str.replace(/^\ +/, '_') //  replaces all the correct spaces with only one underscore

谢谢!

4

4 回答 4

3

您必须使用回调函数:

var newStr = str.replace(/(^( +)|( +)$)/g, function(space) { 
                             return space.replace(/\s/g,"_");
                           }
                         );
于 2013-08-28T17:55:34.747 回答
2

试试这个:

var result = str.replace(/^ +| +$/g,
             function (match) { return new Array(match.length+1).join('_'); });
于 2013-08-28T17:56:51.450 回答
2

这在 JavaScript 中很难。使用 ECMAScript 6,您可以使用/[ ]/ywhich 要求匹配项是相邻的,因此您可以一个接一个地匹配空格,但请确保您不会越过第一个非空格。对于字符串的结尾,您可以(在任何情况下)使用/[ ](?=[ ]*$)/.

对于 ECMAScript 5(可能与您更相关),最简单的方法是使用替换回调:

str = str.replace(
    /^[ ]+|[ ]+$/g,
    function(match) {
        return new Array(match.length + 1).join("_");
    }
);

这将以编程方式读取空格数并写回同样多的下划线。

于 2013-08-28T17:57:15.453 回答
1

我删除了这个答案,因为它显然没有回答 JavaScript 的问题。我正在取消删除它,以便未来的搜索者可以找到一种正则表达式来获取字符串末尾的空格。

这不能正确回答您的问题,但可能对其他人有用

此正则表达式将匹配字符串开头和结尾的所有空格:

^(\s*).*?(\s*)$

只需用下划线替换捕获组!

于 2013-08-28T17:55:20.267 回答