Javascript 根据新行和两位数将字符串数据拆分为数组

Javascript 根据新行和两位数将字符串数据拆分为数组,javascript,regex,string,Javascript,Regex,String,我要做的是将数据从字符串分割成一个数组 以下是文本格式的总体思路 xxxxx表示字母数字空格数据的任意组合 xxxxx 1 xxxxxxxxxx 2 xxxxxxxxxx xxxxxxxxx xxxxxxxxx xxxxxxxx 3 xxxxxxxxxx 4 xxxxxxxxxx xxxxxxxxxx 5 xxxxxxxxxx (当数字达到两位数时,十的位置进入数字前面的空白位置) 现在我想做的是有一个5个元素的数组(在本例中),它存储了跟踪的数字和所有数据(包括新行)。在过去,这不

我要做的是将数据从字符串分割成一个数组

以下是文本格式的总体思路

xxxxx
表示字母数字空格数据的任意组合

xxxxx
 1 xxxxxxxxxx
 2 xxxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxx
 3 xxxxxxxxxx
 4 xxxxxxxxxx
xxxxxxxxxx
 5 xxxxxxxxxx

(当数字达到两位数时,十的位置进入数字前面的空白位置)

现在我想做的是有一个5个元素的数组(在本例中),它存储了跟踪的数字和所有数据(包括新行)。在过去,这不是什么大问题,我可以使用
string.split(“\n”)
,但现在我需要基于某种正则表达式(如
/\n[0-9]{1,2}/
)进行定界,因此我正在寻找一种快速简便的方法来实现这一点(因为split()不支持正则表达式)

我希望数组是这样的

array[1] = " 1 xxxxxxxxxx"
array[2] = " 2 xxxxxxxxxxx\nxxxxxxxxxx\nxxxxxxxxxx"
array[3] = " 3 xxxxxxxxxx"
...etc

您可以在
(?=[1-9]|[1-9][0-9])
上使用前瞻和拆分,可能定位在行首,但
xxxx
部分可能存在歧义问题。这也不能确保编号是连续的

例子 输出为():


正如@polygene所说,您可以使用带有replace的正则表达式并生成一个临时分隔符,然后在该分隔符上拆分并删除它

下面是您上面给出的字符串中的一个工作示例,以及我为测试函数而制作的另一个示例。两者都适用。由于您没有为示例提供任何实际数据,因此我无法对此进行测试,但希望这至少能让您走上正确的道路

function SplitCrazyString(str) {
    var regex = /(\n\s?\d+\s[^(\n\s?\d+)]+)/mg;

    var tempStr = str.replace(regex, "~$1");

    var ary = tempStr.split('~');

    for (var i = 0; i < ary.length; i++) {
        ary[i].replace('~', '');
    }

    return ary;
}
var x = "xxxxx\n" +
    " 1 xxxxxxxxxx\n" +
    " 2 xxxxxxxxxx\n" +
    "xxxxxxxxx\n" +
    "xxxxxxxxx\n" +
    "xxxxxxxx\n" +
    " 3 xxxxxxxxxx\n" +
    " 4 xxxxxxxxxx\n" +
    "xxxxxxxxxx\n" +
    " 5 xxxxxxxxxx\n";
var testStr = "6daf sdf84 as96\n" +
    " 1 sfs 4a8dfa sf4asf\n" +
    " 2 s85 d418 df4 89 f8f\n" +
    "65a1 sdfa48 asdf61\n" +
    "w1c 987a w1ec\n" +
    "a6s85 d1a6f 81sf\n" +
    " 3 woi567 34ewn23 5cwe6\n" +
    " 4 s6k 8hf6 9gd\n" +
    "axxm4x1 dsf615g9 8asdf1jt gsdf8as\n" +
    " 5 n389h c8j923hdha 8h3x982qh\n";

var xAry = SplitCrazyString(x);
var testAry = SplitCrazyString(testStr);
函数拆分字符串(str){
var regex=/(\n\s?\d+\s[^(\n\s?\d+))/mg;
var tempStr=str.replace(regex,“~$1”);
变量ary=tempStr.split('~');
对于(变量i=0;i
split()
不支持正则表达式。试试这个:

text.split(/\n(?=[1-9 ][0-9] )/)

xxxxx表示字母数字空格数据的任意组合
-如果其中一个xxxx是'4 asdasdasd',您会怎么做?它如何理解新部分和旧部分的位置?我的问题是我不能将正则表达式与string.split()一起使用。。。是的,里面有大量的数字,但我可以告诉你,它们总是按照上面的模式填充:一个新行,一个空白(或数字),一个数字,一个空白,然后是其余的数据。@user:为什么不能使用regex?您正在使用javascript,是吗?也许更可读的输出,除了
split
:,还有
replace
;如果您至少可以执行regex
replace
,那么您可以执行类似的操作,插入一个文本字符串分隔符,然后对该文本字符串执行
split
。跟我走。
function SplitCrazyString(str) {
    var regex = /(\n\s?\d+\s[^(\n\s?\d+)]+)/mg;

    var tempStr = str.replace(regex, "~$1");

    var ary = tempStr.split('~');

    for (var i = 0; i < ary.length; i++) {
        ary[i].replace('~', '');
    }

    return ary;
}
var x = "xxxxx\n" +
    " 1 xxxxxxxxxx\n" +
    " 2 xxxxxxxxxx\n" +
    "xxxxxxxxx\n" +
    "xxxxxxxxx\n" +
    "xxxxxxxx\n" +
    " 3 xxxxxxxxxx\n" +
    " 4 xxxxxxxxxx\n" +
    "xxxxxxxxxx\n" +
    " 5 xxxxxxxxxx\n";
var testStr = "6daf sdf84 as96\n" +
    " 1 sfs 4a8dfa sf4asf\n" +
    " 2 s85 d418 df4 89 f8f\n" +
    "65a1 sdfa48 asdf61\n" +
    "w1c 987a w1ec\n" +
    "a6s85 d1a6f 81sf\n" +
    " 3 woi567 34ewn23 5cwe6\n" +
    " 4 s6k 8hf6 9gd\n" +
    "axxm4x1 dsf615g9 8asdf1jt gsdf8as\n" +
    " 5 n389h c8j923hdha 8h3x982qh\n";

var xAry = SplitCrazyString(x);
var testAry = SplitCrazyString(testStr);
text.split(/\n(?=[1-9 ][0-9] )/)