正则表达式,用逗号分隔,javascript

时间:2017-02-15 20:28:41

标签: javascript regex

我的字符串:

AA,$,DESCRIPTION(Sink, clinical),$

通缉比赛:

AA
$
DESCRIPTION(Sink, clinical)
$

我的正则表达式:

\+d|[\w$:0-9`<>=&;?\|\!\#\+\%\-\s\*\(\)\.ÅÄÖåäö]+

这给出了

AA
$
DESCRIPTION(Sink
clinical)

我希望在()

之间保持匹配

https://regex101.com/r/MqFUmk/3

4 个答案:

答案 0 :(得分:1)

这是我对正则表达式的尝试

\+d|[\w$:0-9`<>=&;?\|\!\#\+\%\-\s\*\.ÅÄÖåäö]+(\(.+\))?

我从[ ]字符中删除了括号,并允许在其他位置捕获。它似乎满足您发布的regex101链接。

根据输入的任意性,此正则表达式可能不适合更复杂的字符串。

Alternatively, here's an answer which could be more robust than mine, but may only work in Ruby.

((?>[^,(]+|(\((?>[^()]+|\g<-1>)*\)))+)

答案 1 :(得分:1)

那个似乎对我有用吗?

([^,\(\)]*(?:\([^\(\)]*\))?[^,\(\)]*)(?:,|$)

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

希望这有帮助!

答案 2 :(得分:1)

就个人而言,我会先用括号()中的所有逗号替换一个永远不会出现的字符(在我的情况下,我使用@,因为我没有在你的内容中看到它)然后我会用逗号分割它们以保持它的甜美和简单。

myStr = "AA,$,DESCRIPTION(Sink, clinical),$";            //Initial string
myStr = myStr.replace(/(\([^,]+),([^\)]+\))/g, "$1@$2"); //Replace , within parentheses with @
myArr = myStr.split(',').map(function(s) { return s.replace('@', ','); }); //Split string on ,
//myArr -> ["AA","$","DESCRIPTION(Sink, clinical)","$"]

可选地,如果您使用ES6,则可以将最后一行更改为:

myArr = myStr.split(',').map(s => s.replace('@', ','));  //Yay Arrow Functions!

注意: 如果您有嵌套括号,则此答案需要修改

答案 3 :(得分:0)

最后对你需要的东西进行近似:

\w+(?:\(.*\))|\w+|\$

https://regex101.com/r/MqFUmk/4