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

时间:2011-12-12 08:03:35

标签: javascript regex node.js

我需要拆分各种字符串实例。以下是一些示例和所需的输出方案。还列出了要拆分的规则:

示例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模块的。

2 个答案:

答案 0 :(得分:2)

此正则表达式适用于您概述的案例:

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

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

粗略解释:任何 | 字符后跟(字符或 | 后跟] )。如果您在发表评论时需要更精确的解释,我会尽量使其更清晰。

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

答案 1 :(得分:1)

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

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);