简体   繁体   中英

Regex, separate by comma, javascript

My string:

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

Wanted matches:

AA
$
DESCRIPTION(Sink, clinical)
$

My regex sofar:

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

This gives

AA
$
DESCRIPTION(Sink
clinical)

I want to keep matches between ()

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

Here's my attempt at the regex

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

I removed the parentheses from within the [ ] characters, and allowed capture elsewhere. It seems to satisfy the regex101 link you posted.

Depending on how arbitrary your input is, this regex might not be suitable for more complex strings.

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

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

That one seems to work for me?

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

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

Hope this helps!

Personally, I would first replace all commas within parentheses () with a character that will never occur (in my case I used @ since I don't see it within your inclusions) and then I would split them by commas to keep it sweet and simple.

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)","$"]

optionally, if you're using ES6 , you can change that last line to:

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

Note: If you have nested parentheses, this answer will need a modification

At last take an aproximation of what you need:

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM