Reputation: 38
I need a JavaScript RegEx to split a string by semicolon outside single or double quotes.
Actually i'm using the following regex /(?!\B['"][^'"]*);(?![^'"]*['"]\B)/gm
that sadly doesn't cover every case.
What i need:
const string = `Lorem ipsum; "dolor sit; amet"; consectetur 'adipiscing; elit.' Fusce; sit amet ligula.; Phasellus in laoreet quam.`;
const resultArr = string.split(/THEREGEX/gm);
console.log(resultArr);
// ["Lorem ipsum", "\"dolor sit; amet\"", " consectetur 'adipiscing; elit.' Fusce", "sit amet ligula.", " Phasellus in laoreet quam."]
Upvotes: 2
Views: 774
Reputation: 785098
You may use this regex:
((?:[^;'"]*(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*')[^;'"]*)+)|;
Code:
const s = `Lorem ipsum; "dolor sit; amet"; consectetur 'adipiscing; elit.' Fusce; sit amet ligula.; Phasellus in laoreet quam.`
const re = /((?:[^;'"]*(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*')[^;'"]*)+)|;/
console.log( s.split(re).filter(Boolean) )
RegEx Details:
(
: Start capture group #1
[^;'"]*
: Match 0 or more any character that are not '
and "
and not ;
(?:
: Start non-capture group
"(?:\\.|[^"])*"
: Match a double quoted substring ignoring all escaped quotes|
: OR'(?:\\.|[^'])*'
: Match a single quoted substring ignoring all escaped quotes)
: End non-capture group[^;'"]*
: Match 0 or more any character that are not '
and "
and not ;
)
: End capture group #1|
: OR;
: Match a ;
.filter(Boolean)
: is used to remove empty results from split arrayUpvotes: 6