我想用一些正则表达式替换某些括号之间的空格。如果我使用正则表达式只替换一些空格(只有唯一的对)。
字符串可能有其他空格,但我只想要paranthesis之间的空格。
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/\)\s\)/g, "))");
console.log(mystring);
输出是:
) ) ) ) ) )
)) )) ))
但我希望得到这个输出:
) ) ) ) ) )
))))))
答案 0 :(得分:10)
问题在于,通过使用) )
,在查看字符串的下一部分时,您不再具有前导)
。
不要替换)
,而是使用正向前瞻断言来仅替换第一个和之后的空格如果后面跟着它们另一个)
:
mystring = mystring.replace(/\)\s(?=\))/g, ")");
// Lookahead ---^^^^^^ ^--- only one ) in replacement
直播示例:
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/\)\s(?=\))/g, ")");
console.log(mystring);

答案 1 :(得分:2)
看起来怎么样:
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/(?<=\))\s(?=\))/g, "");
console.log(mystring);
演示:
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/(?<=\))\s(?=\))/g, "");
console.log(mystring);
这将删除) )
答案 2 :(得分:1)
将最后)
移至正向前瞻,并替换为单个)
:
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/\)\s+(?=\))/g, ")");
console.log(mystring); // => ))))))
模式详情
\)
- )
\s+
- 1+空格(?=\))
- 一个积极的前瞻,需要)
立即在当前位置的右侧(在1 +空格之后)。