在 Python 中,有很好的旧firstline, rest = text.split("\n", 1)
. 在经历了一些痛苦的发现之后,我意识到 JavaScript 赋予了limit属性不同的含义,并返回了那么多“拆分”(1 表示它只返回第一行,2 只返回前两行,依此类推)。
获得我想要的东西的最佳方式是什么?我必须与slice
and凑合indexOf
吗?
在 Python 中,有很好的旧firstline, rest = text.split("\n", 1)
. 在经历了一些痛苦的发现之后,我意识到 JavaScript 赋予了limit属性不同的含义,并返回了那么多“拆分”(1 表示它只返回第一行,2 只返回前两行,依此类推)。
获得我想要的东西的最佳方式是什么?我必须与slice
and凑合indexOf
吗?
可能是最有效的方法:
function getFirstLine(text) {
var index = text.indexOf("\n");
if (index === -1) index = undefined;
return text.substring(0, index);
}
然后:
// "Some string goes here"
console.log(getFirstLine("Some string goes here\nSome more string\nAnd more\n\nMore"));
// "asdfasdfasdf"
console.log(getFirstLine("asdfasdfasdf"));
编辑:
function newSplit(text, lineSplit) {
if (lineSplit <= 0) return null;
var index = -1;
for (var i = 0; i < lineSplit; i++) {
index = text.indexOf("\n", index) + 1;
if (index === 0) return null;
}
return { 0: text.substring(0, index - 1), 1: text.substring(index) }
}
输出:
newSplit("someline\nasdfasdf\ntest", 1);
> Object {0: "someline", 1: "asdfasdf↵test"}
newSplit("someline\nasdfasdf\ntest", 2);
> Object {0: "someline↵asdfasdf", 1: "test"}
newSplit("someline\nasdfasdf\ntest", 0);
> null
newSplit("someline\nasdfasdf\ntest", 3);
> null
您可以使用shift
从数组中删除第一项。
var lines = text.split("\n"); // split all lines into array
var firstline = lines.shift(); // read and remove first line
var rest = lines.join("\n"); // re-join the remaining lines
这可能在规范上最接近您在 Python 中所做的工作,但它几乎不是最有效的方法。
另一种可能性,使用带有String.match
and的正则表达式Array.slice
Javascript
var text = "Simple Simon met a Pieman,\ngoing to a fair.\nSaid simple Simon to the Pieman,\n\n\"Let me taste your ware.\"";
console.log((text.match(/^([\s\S]*?)\n([\s\S]*)$/) || []).slice(1, 3));
输出
["Simple Simon met a Pieman,", "going to a fair.↵Said simple Simon to the Pieman,↵↵"Let me taste your ware.""]
RegExp.exec() 方法可以解决问题:
//some multiline text
var text='line1\nline2'
//exec puts the first line in an array
var firstline=/.*/.exec(text)[0]
REPL 输出:
>>> firstline
line1
当正则表达式保存为具有全局和多行标志的对象时,可以使用 exec 单步执行循环中的每一行,在 jsc REPL 中手动显示:
>>> var reg = /^.*/gm
>>> var text='line1\nline2'
>>> reg.exec(text)
line1
>>> reg.exec(text)
line2
>>> reg.exec(text)
null