我希望在这种特定情况下用下划线替换字符串开头和结尾的所有空格:
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
谢谢!
答案 0 :(得分:3)
您必须使用回调函数:
var newStr = str.replace(/(^( +)|( +)$)/g, function(space) {
return space.replace(/\s/g,"_");
}
);
答案 1 :(得分:2)
试试这个:
var result = str.replace(/^ +| +$/g,
function (match) { return new Array(match.length+1).join('_'); });
答案 2 :(得分:2)
这个在JavaScript中很难。使用ECMAScript 6,您可以使用/[ ]/y
,这将要求匹配相邻,因此您可以逐个匹配空格,但要确保不要超过第一个非空格。对于字符串的结尾,您可以(在任何情况下)使用/[ ](?=[ ]*$)/
。
对于ECMAScript 5(可能与您更相关),最简单的方法是使用替换回调:
str = str.replace(
/^[ ]+|[ ]+$/g,
function(match) {
return new Array(match.length + 1).join("_");
}
);
这将以编程方式读取空格数并写回尽可能多的下划线。
答案 3 :(得分:0)
我删除了这个答案,因为它显然没有回答JavaScript的问题。我取消删除它,以便未来的搜索者可以找到一种在字符串末尾获得空格的方法。
这不能正确回答您的问题,但可能对其他人有用
此正则表达式将匹配字符串开头和结尾的所有空格:
^(\s*).*?(\s*)$
只需用下划线替换捕获组!