删除括号前后的所有空格

时间:2018-09-05 15:16:15

标签: javascript regex

我想在任何括号前 之后删除一个或多个空格。紧随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

3 个答案:

答案 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