JavaScript 正则表达式替换括号中间的空格

3

如何使用JS正则表达式,在括号之间将所有空格替换为单词SPACE?所以,我想要的是这样的:

myString = "a scentence (another scentence between brackets)"
myReplacedString = myString.replace(/*some regex*/)
//myReplacedString is now "a scentence (anotherSPACEscentenceSPACEbetweenSPACEbrackets)"

编辑: 我尝试过的是这个(我对正则表达式还很陌生)

myReplacedString = myString.replace(/\(\s\)/, "SPACE");

你有尝试过什么来解决这个问题吗?如果你告诉我们你已经尝试了什么,我们会更愿意回答你的问题。 (提高提问质量的有用链接:[ask],[help]) - tckmn
我会在较短的字符串上使用 let res = input.replace(/\s+(?=[^)(]*\))/g, "");,对于较长或内部有大量空格的字符串,我会使用回调函数 let res = str.replace(/\([^)(]*\)/g, m => m.replace(/\s+/g, "")); - bobble bubble
如果括号是嵌套的,它可以通过解析(JS演示)完成。 - bobble bubble
2个回答

6
您可以尝试使用正则表达式:
/\s(?![^)]*\()/g

这将匹配任何空格,没有在其前面的开放括号,并且在空格和开放括号之间没有关闭括号。

这里有一个演示

编辑:我没有考虑到句子不以括号结尾的情况。@thg435的正则表达式覆盖了它:

/\s(?![^)]*(\(|$))/g

3
我会建议使用 /\s(?![^)]*(\(|$))/ 来处理类似 xx (xx xx) xx xx 的情况。 - georg

3

我不确定一个正则表达式是否可以,但是您可以使用两个。一个用于获取()内的字符串,然后另一个用于将' '替换为'SPACE'

myReplacedString = myString.replace(/(\(.*?\))/g, function(match){
    return match.replace(/ /g, 'SPACE');
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接