我有一个正则表达式,它会将我的字符串拆分为数组,如果它发现NULL \ n或'\ n。Javascript正则表达式拆分,但保留部分分隔符
我的字符串是:
"'<xml↵ data>', NULL↵'abc', '<xml↵ data>'↵'abc', 'abc'"
(字符串已与逗号分隔值,所有值都包裹着单引号,除了NULL值的新行与新行定义的,但我真正的问题是。值也可以有新的生产线)
随着/NULL\n|'\n/
我得到这样的结果:
["'<xml↵ data>', ", "'abc', '<xml↵ data>", "'abc', 'abc'"]
卜现在我想保留NULL和'分隔符的一部分(如果保留\ n,我也可以)。因此,它应该是这样的:
["'<xml↵ data>', NULL", "'abc', '<xml↵ data>'", "'abc', 'abc'"]
到目前为止我的代码:
var data = "'<xml\n data>', NULL\n'abc', '<xml\n data>'\n'abc', 'abc'"
var result = data.split(/NULL\n|'\n/)
console.log(result)
非常感谢您的帮助。我现在有类似的线程(like this one),但我不擅长正则表达式,所以我在为我的需求转换解决方案时并不成功。
编辑:工作液(如果其他人需要它)
从@迈克尔·桑切斯回答我创建了一个基于的indexOf(虽然我从性能上看有点担心这方面的工作职能,因为在我的情况下,循环必须越过4MB大文本):
现场演示:http://jsfiddle.net/ngr97jz7/3/我能想到的是
function ConvertToArray(text){
var rows = [];
var i = 1;
while(i != -1 && i != 0){
//find closer appearance
var a = text.indexOf("NULL\n");
var b = text.indexOf("'\n");
i = ((a < b && a != -1) || (a > b && b == -1)) ? a+4 : b+1; //set index + 4 chars for NULL or 1 char for '
if(i == 0 || i == -1){
rows.push(text);
break;
}
rows.push(text.substring(0,i));
text = text.substring(i+1, text.length)
}
return rows;
}
你必须分开一个VOID字符串,这是可以通过在正则表达式中使用分组,但因为lookbehind不被javascript正则表达式支持,我不太确定如何做到这一点。如果你想知道更多,这里有一个PCRE的例子(这不适用于你的正则表达式),但会给你想法,为什么你的代码是这样的,或者一些图书馆在javascript支持向后看,无论如何。 http://regex101.com/r/lR8wG9/1 – 2014-09-02 12:50:25
http://stackoverflow.com/questions/12317499/javascript-and-regex-split-and-keep-delimiter?rq=1 – 2014-09-03 05:50:30