[英]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.