繁体   English   中英

根据新行将字符串数据拆分为数组,然后将两位数字拆分

[英]Split string data into array based on new line and then double digit number

我要做的是将数据从字符串拆分为数组。

这是文本格式的一般概念......

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

split() 支持的正则表达式。 尝试这个:

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

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

var text =
  "preface\n" +
  " 1 intro\n" +
  " 2 body\n" +
  "more body\n" +
  " 3 stuff\n" +
  "more stuff\n" +
  "even 4 stuff\n" +
  "10 conclusion\n" +
  "13 appendix\n";

print(text.split(/^(?= [1-9] |[1-9][0-9] )/m));

输出是( 如ideone.com上所示 ):

preface
, 1 intro
, 2 body
more body
, 3 stuff
more stuff
even 4 stuff
,10 conclusion
,13 appendix

正如@polygenelubricants所说,你可以使用带有替换的正则表达式并制作一个临时分隔符,然后拆分该分隔符并将其删除。

这是一个工作示例,来自您上面给出的字符串和另一个我用来测试函数。 它适用于两者。 由于您没有为示例提供任何实际数据,我无法测试,但希望这至少会让您走上正确的轨道。

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM