分割字符串,忽略特殊的RegEx子字符串



我需要分割字符串,分割字符是","但必须跳过"("…")"

const paramString = "gyro (param1, param2), proximity, Ultra Wideband (UWB) support, compass";
const paramArr = paramString.match(/[^(),]+((.+?))?/g).map( item => item.trim() ); 

在我的结果是paramArr[2]坏。

[ "gyro (param1, param2)", "proximity", "Ultra Wideband (UWB)", "support", "compass" ]

I need result:

[ "gyro (param1, param2)", "proximity", "Ultra Wideband (UWB) support", "compass" ]

请告知如何更新我的RegEx。

你应该使用反向向前看。您基本上选择所有逗号(后面有空格以修饰它们),如果之前没有(,则不跟随):

const paramString = "gyro (param1, param2), proximity, Ultra Wideband (UWB) support, compass";
const paramArr = paramString.split(/,s*(?![^(]*))/);
console.log(paramArr);

注意:嵌套括号不起作用。它将在以下场景中失败:

const paramString = "gyro (param1, (param2)), proximity, Ultra Wideband (UWB) support, compass";

尝试下面提到的regx,这将只在预期的令牌中中断字符串。

/[w ]+(([^)]*))?( w+)?/gi

regx将您的字符串分成以下标记。

gyro (param1, param2)
proximity
Ultra Wideband (UWB) support
compass

请点击regx的实时演示链接:

https://regex101.com/r/yCYHgw/1

https://regex101.com/r/yCYHgw/2


(已更新,regx仅适用于非嵌套)

最新更新