按不在特定边界内的字符分割字符串
Split string by chars which not inside specific boundary
我想写一个正则表达式,它通过逗号分隔字符串,而不是在()中。
例子:
"test,test,test".split(/.../) => var a = ["test", "test", "test"];
"test(123,345),test".split(/.../) => var a = ["test(123,345)", "test"];
"test(123,345),a(b,c)".split(/.../) => var a = ["test(123,345)", "a(b,c)"];
"test(cb(a,b),345),a(b(d,e,f),c),abc".split(/.../) => var a = ["test(cb(a,b),345)", "a(b(d,e,f),c)", "abc"];
我有以下正则表达式,但它只有在第一个匹配逗号后没有()时才有效:
"test,test,test".split(/,(?!.*'))/) => OK
"test(cb(a,b),345),test,test".split(/,(?!.*'))/) => OK
"test,test(cb(a,b),345),test".split(/,(?!.*'))/) => FAIL
正则表达式不适合这种任务。我认为使用自己的解析器更容易,您可以按照括号嵌套的级别来确定是否应该分割:
function splitTokens(var input) {
var tokens = [];
var currentToken = "";
var nestingLevel = 0;
for (var i = 0; i < input.length; i++) {
var currentChar = input[i];
if (currentChar === "," && nestingLevel === 0) {
tokens.push(currentToken);
currentToken="";
} else {
currentToken+=currentChar;
if (currentChar === "(") { nestingLevel++; }
else if (currentChar === ")") { nestingLevel--; }
}
}
if (currentToken.length) {
tokens.push(currentToken);
}
return tokens;
}
请注意,我没有处理不匹配的括号,您可能需要为这些情况添加逻辑。
相关文章:
- 在JavaScript中输出转义字符
- 不同浏览器中的空白字符正则表达式行为
- Regex匹配除“”之外的所有字符;.js”;
- 如何从日期中分割x个字符
- 如何在JavaScript中每隔第n个字符分割一个字符串
- 用JavaScript在特殊字符处分割字符串
- 在任何换行字符处分割字符串,但如果后面没有文本则忽略
- 按不在特定边界内的字符分割字符串
- 如何根据被分割字符两侧的字符分割字符串
- 当没有字符要分割时,Javascript拆分将不起作用
- 分割javascript字符与特定的领先和落后的字符
- 如何按字符的差异分割字符串作为分隔符
- 如何在jquery中分割特定字符后的字符串
- 从以某个字符开头的文本中分割单词
- 如何分割长字符串后的第一个空间后100个字符
- 按字符分割字符串,但跳过某些字符组合
- 如何在两个字符之间分割字符串
- 从字符和我不想删除的字符分割字符串
- 在字符类改变的地方分割字符串
- 如果用户将32个字符粘贴到license文本框中,则首先分割文本框