在JavaScript中使用RegExp拆分字符串,忽略括号内的分隔符
Split string in JavaScript using RegExp ignoring the delimiter inside brackets
我有各种需要拆分的字符串实例。下面是一些示例和期望的输出场景。分割的规则也列出了:
示例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);
相关文章:
- 不使用分隔符分解字符串
- 通过多个分隔符解析字符串
- 用分隔符分隔具有多个整数值的字符串的Javascript"重试错误的值
- 使用Regex拆分字符串,保留分隔符
- JS将分隔符分隔的字符串转换为数组元素
- 在 Javascript 中拆分包含单次出现(不是两次)分隔符的字符串
- 如何将带有逗号千位分隔符的字符串解析为数字
- 在 JavaScript 中拆分字符串,但保留分隔符 /
- 如何拆分具有多个分隔符的字符串
- jquery JSON 从查询字符串中删除分隔符
- 正则表达式使用特定的分隔符JavaScript从字符串中提取部分
- JS/XSS:将用户提供的字符串分配给变量时;替换 <,> 和字符串分隔符是否足够
- 使用 jquery 或 javascript 拆分带有不同分隔符的字符串
- 基于多个分隔符拆分字符串
- 字符串分词器无法正确处理一行中的空标记或多个分隔符
- 如何在 js 中使用 .match(regEx) 仅获取不带分隔符的内部字符串
- 如何在javascript中拆分行空格/分隔符上的字符串
- 如何使用 Angular “数字”过滤器键入时在输入字段中设置带有千和小数分隔符的字符串格式
- 将带有分隔符的数组拆分为字符串
- JavaScript 在带有精确分隔符的字符串中搜索字符串