我需要拆分各种字符串实例。以下是一些示例和所需的输出方案。还列出了要拆分的规则:
示例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模块的。
答案 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);