我想在任何括号前 和 之后删除一个或多个空格。紧随this post之后,使用以下正则表达式解决了PHP问题
(?<=[([]) +| +(?=[)\]])
现在,我想在 Javascript 中执行相同的操作,但Javascript regex引擎的前瞻性和后向性与PHP相同。我设法使以下正则表达式至少在Javascript中有效,但它删除了所有空格:
?![([]) +| +(?=[)\]])
请参见Regex101 test。
给出字符串:
This is ( a sample ) [ string ] to play with
预期结果:
This is (a sample) [string] to play with
答案 0 :(得分:3)
您可以改用捕获组,并用其占位符替换以恢复结果中的括号/括号:
.replace(/([([])\s+|\s+([)\]])/g, "$1$2");
请参见regex demo
详细信息
([([])\s+
-第1组捕获(
或[
(在字符串替换模式中用$1
指代),然后捕获1+个空格|
-或\s+([)\]])
-1个以上空格,后跟)
或]
被捕获到第2组(在字符串替换模式中用$2
引用)JS演示:
var strs = ['This is ( a sample ) [ string ] to play with',
'This is ( a sample ) [ string] to play with'];
var rx = /([([])\s+|\s+([)\]])/g;
for (var s of strs) {
console.log(s+ " =>\n"+ s.replace(rx, "$1$2"));
}
答案 1 :(得分:0)
您可以尝试以下方法:
function Do(){
console.log(document.querySelector("input").value
.replace(/\s*?\s([\[\(])\s*/g, " $1").replace(/\s*([\)\]])(\s?)\s*/g, "$1$2"));
}
<b>Type Your String Here:</b>
<input type='text' style='width:300px' value="This is ( a sample ) [ string ] to play with"/>
<input type='button' onclick="Do();" value="Start!"/>
答案 2 :(得分:0)
您可以通过使用正向先行和简单替换来实现。
true
例如
true