2

次のような発言があります。

何とか
何とか
ジョンはこれを
何とか
何とか
ジョンはそれをやった
など.

このテキストは、John で始まる行の末尾にある改行で分割する必要があります。John の後のテキストは一貫していませんが、最後の行は常に John で始まります。「John」で分割するのは簡単ですが、「John という単語の後の次の改行で分割する」と言う方法がわかりません。

.split(/(.*?John*?\n)+/g)

上記は、ジョンが独自のエントリになるように分割します。

編集

出力は次のようになります。

(何とか
ジョン
はこれをやった)

何とか
ジョンはあれをやった)
(など...

括弧は、分割境界/単一配列エントリを表します。

4

3 に答える 3

1

私はそれがあなたのために働くと思います:

.split(/.+John.+\n/g)

.任意の要素

+1回以上

John

.+任意の要素を 1 回以上

\n改行

gグローバル。最初のスプリットで止まらない。

編集

これで: .split(/(.*?John*?\n)+/g)、あなたは一致しています:

.*任意の要素 0 回以上

John*?ジョン 0 回以上。?ここでは意味がありません。

\n改行

したがって、これは John の後に再び John に一致するもの、または新しい行に一致するものではありません。

于 2013-11-04T18:29:35.650 に答える
1

これはうまくいくはずです:

s = "blah\n" +
"blah\n" +
"John did this\n" +
"blah\n" +
"blah\n" +
"John did that";

m = s.match(/[\s\S]*?\bJohn\b[^\n]*/g);

console.log(m);

出力:

["blah
blah
John did this", "
blah
blah
John did that"]
于 2013-11-04T18:36:11.720 に答える
0

これは私がそれを行う方法です:

var splitted = text.match(/[^]+?John.+\n/g);
  • [^]+?→ John を消費しないように嫌がる任意の char (ただし、少なくとも 1 つの char)
  • .+\n→ John と同じ行のすべての文字

@anubhavaが提案したように、任意の文字に使用できます。さらに、分割する正規表現がない場合は、[\s\S]ジョンを囲みます。空の文字列を一致させたい場合は、改行を含めたくない場合は、(改行を除くすべての文字) を使用します。 \bJonhy+*[^\n]+


働くフィドル

于 2013-11-04T18:49:05.727 に答える