替换字符序列的JavaScript正则表达式

替换字符序列的JavaScript正则表达式,javascript,regex,Javascript,Regex,在此特定情况下,我想用下划线替换字符串开头和结尾的所有空格: var a = ' ## ## # '; console.log(myReplace(a)); // prints ___## ## #__ 即:第一个字符串之前的所有空格和最后一个后的所有空格,所有其他(包括字符串中间的空格)保持不变。 我最初的想法是使用两个Reg Exp,一个用于问题的每个部分 但是,我无法得到第一个,我也不确定是否可以使用JS regexp实现我想要的功能 str.replace(/^\ /g, '_'

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

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

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

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

但是,我无法得到第一个,我也不确定是否可以使用JS regexp实现我想要的功能

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

谢谢

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

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

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

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

只需将捕获组替换为下划线即可

您必须使用回调函数:

var newStr = str.replace(/(^( +)|( +)$)/g, function(space) { 
                             return space.replace(/\s/g,"_");
                           }
                         );
试试这个:

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

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

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

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

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

谢谢!我的JS已经生锈了,我记得JS regexps中有回调,但由于Mozilla文档没有提到,我认为我错了。@Tiago@m.buettner:哦,我想,但这只是指南。再次感谢!谢谢卡西米尔!我选择Rohit的答案作为正确答案,因为他首先回答了问题,他的解决方案按预期工作。不过,我可能会用你的方式,因为它更优雅,而且是我以前从未用过的东西。“我以前从未用过的东西”:我也是。谢谢buettner先生。你说得对,ECMAScript 5更为相关,但感谢您为主题提供更多信息。我当然不知道ECMAScript 6的这个新特性。正如我在卡西米尔的回答中所评论的那样,我选择罗希特的回答是正确的,因为他先回答了。