Javascript正则表达式拆分但保留了分隔符的一部分

时间:2014-09-02 10:20:36

标签: javascript regex split

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

我的字符串是:

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

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

使用/NULL\n|'\n/我得到了这个结果:

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

但是现在我想保留分隔符的 NULL &#39; 部分(如果\ 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),但我在正则表达式方面表现不佳,所以在为我的需求转换解决方案时我没有成功。

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

来自@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;
}

1 个答案:

答案 0 :(得分:0)

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

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

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

编辑: 我的不好,你的问题是在javascript中。只需忽略列表步骤。