Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
959 views
in Technique[技术] by (71.8m points)

regex - Split string in JavaScript using RegExp ignoring the delimiter inside brackets

I have various instances of strings that I need to split. Following are some examples and the desired output scenarios. The rules to split are also listed:

Example 1:

input: 'filename.ext|someattributes'
output array: 
  'filename.ext', 
  'someattributes'

Example 2:

input: qualifier1[filename.ext|someattributes]|qualifier2[another_filename.ext|some_other_attributes]
output array: 
  'qualifier1[filename.ext|someattributes]',
  'qualifier2[another_filename.ext|some_other_attributes]'

Example 3:

input: dummyqualifier|qualifier1[filename.ext|someattributes]
output array: 
  'dummyqualifier', 
  'qualifier1[filename.ext|someattributes]'

The rules are simple. Split the string using '|' as delimiter only when it does not appear inside square brackets. Note: The string may not have any square brackets. There are no spaces in the input strings.

I am looking for a solution in JavaScript as this is for a node.js module.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This regex should work for the cases you've outlined:

/|(?!(?:w+|?)+])/

Here's an example of it running: http://jsfiddle.net/UFq3h/1/ (you will need to have the console opened to see the results).

Crude explanation: any | character not followed by (word characters or | followed by ]). If you need a more precise explanation post a comment and I'll try to make it clearer.

Edit: Thanks to Lolo for the improved version, which handles the last example in the use case.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...