开发中遇到一个场景,类似下面这条字符串需要进行split操作,
const str = 'name: xxx AND age: 12 OR sex: male';
希望得到的结果是,
['name: xxx', 'age: 12', 'sex: male']
一开始凭直觉的解决方案是:
str.split(/ (AND|OR) /g)
// ['name: xxx', 'AND', 'age: 12', 'OR', 'sex: male']
也就是说当你在split方法中用正则,并且正则中包含()
的时候,被()
捕获的部分也会被留在split结果中。
查了一下moz的api文档发现确实如此(Capturing parentheses),不过不同浏览器的支持情况不一。
思考了一下,发现可以通过非捕获分组的方式实现:
str.split(/ (?:AND|OR) /g)
// ['name: xxx', 'age: 12', 'sex: male']
网友评论