我要做的是将数据从字符串拆分为数组。
以下是文本格式的一般概念......
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
答案 0 :(得分:5)
split()
支持正则表达式。试试这个:
text.split(/\n(?=[1-9 ][0-9] )/)
答案 1 :(得分:2)
您可以在(?= [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));
输出为(as seen on ideone.com):
preface
, 1 intro
, 2 body
more body
, 3 stuff
more stuff
even 4 stuff
,10 conclusion
,13 appendix
答案 2 :(得分:1)
正如@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);