在JavaScript中使用RegExp拆分字符串,忽略括号内的分隔符

Split string in JavaScript using RegExp ignoring the delimiter inside brackets

本文关键字:分隔符 字符串 JavaScript 拆分 RegExp      更新时间:2023-09-26

我有各种需要拆分的字符串实例。下面是一些示例和期望的输出场景。分割的规则也列出了:

示例1:

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

示例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]'

示例3:

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

规则很简单。只有当字符串没有出现在方括号内时,才使用'|'作为分隔符分割字符串。注意:字符串不能有任何方括号。输入字符串中没有空格。

我正在寻找在JavaScript的解决方案,因为这是一个node.js模块。

这个正则表达式应该适用于您所概述的情况:

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

下面是它运行的一个示例:http://jsfiddle.net/UFq3h/1/(您需要打开控制台才能看到结果)。

粗略解释:任何|字符后面不跟(字字符或|后面跟])。如果你需要更精确的解释,请发表评论,我会尽量让它更清晰。

编辑:感谢Lolo的改进版本,它处理了用例中的最后一个示例。

我现在想不出正则表达式,但是你可以这样做:

function doSplit(input) {
    var tmp = input.split('|');
    var result = [];
    for (var i = 0, j = 0; i < tmp.length; i++) {
        result[j] = (result[j] ? result[j] + '|' : '') + tmp[i];
        if (result[j].indexOf('[') == -1 || result[j].indexOf(']') != -1) {
            j++;
        }
    }
    return result;
}
var i = 'qualifier1[filename.ext|someattributes]|qualifier2[another_filename.ext|some_other_attributes]';
var o = doSplit(i);