Javascript Regex进行了拆分,但保留了部分分隔符

Javascript Regex split but keep part of delimiters

本文关键字:保留 分隔符 拆分 Regex Javascript      更新时间:2023-09-26

我有一个正则表达式,如果它找到NULL或',它会将字符串拆分为数组。

我的字符串是:

"'<xml↵ data>', NULL↵'abc', '<xml↵ data>'↵'abc', 'abc'"

(字符串的值用逗号分隔,除NULL值外,所有值都用单引号括起来。新行是用新行定义的,但我真正的问题是值也可以有新行。)

使用/NULL'n|''n/,我得到这样的结果:

["'<xml↵ data>', ", "'abc', '<xml↵ data>", "'abc', 'abc'"] 

但现在我想保留NULL'部分分隔符(如果保留,我也可以)。所以它看起来是这样的:

["'<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)

非常感谢你的帮助。我现在也有类似的线程(比如这个),但我不擅长regex,所以在根据我的需求转换解决方案时没有成功。

编辑:工作解决方案(如果其他人需要)

根据@Michael Sanchez的回答,我创建了这个基于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;
}

我能想到的一种方法是首先使用循环和.indexOf(<string>, <index>); 在整个字符串中找到分隔符的所有索引

创建另一个循环,使用之前检索到的索引获取主字符串的所需子字符串。你可以把它们添加到一个列表中,然后把它变成一个数组:

List<String> list = new ArrayList<String>();
// after list is populated
String[] arr = list.toArray(new String[list.size()]);

编辑:糟糕的是,你的问题出在javascript上。忽略列表步骤即可。