30

私はjavascriptの分割を使用して文字列から文を取得しようとしていますが、区切り文字は保持しています(例:!?)。

これまでのところ私は

sentences = text.split(/[\\.!?]/);

これは機能しますが、各文の終了句読点は含まれません(。!?)。

誰かがこれを行う方法を知っていますか?

4

5 に答える 5

65

分割ではなく一致を使用する必要があります。

これを試して。

var str = "I like turtles. Do you? Awesome! hahaha. lol!!! What's going on????";
var result = str.match( /[^\.!\?]+[\.!\?]+/g );

var expect = ["I like turtles.", " Do you?", " Awesome!", " hahaha.", " lol!!!", " What's going on????"];
console.log( result.join(" ") === expect.join(" ") )
console.log( result.length === 6);
于 2012-08-01T14:43:34.433 に答える
11

以下は、ラリーの答えへの小さな追加であり、これはまた、パラセティック文にも一致します。

text.match(/\(?[^\.\?\!]+[\.!\?]\)?/g);

適用対象:

text = "If he's restin', I'll wake him up! (Shouts at the cage.) 
'Ello, Mister Polly Parrot! (Owner hits the cage.) There, he moved!!!"

与える:

["If he's restin', I'll wake him up!", " (Shouts at the cage.)", 
" 'Ello, Mister Polly Parrot!", " (Owner hits the cage.)", " There, he moved!!!"]
于 2014-01-10T00:30:29.003 に答える
6

代わりにこれを試してください:-

sentences = text.split(/[\\.!\?]/);

?は正規表現の特殊文字であるため、エスケープする必要があります。

申し訳ありませんが、あなたの質問を読み逃しました-区切り文字を保持したい場合は、この質問を表示しmatchないで使用する必要がありますsplit

于 2012-08-01T14:38:38.057 に答える
3

mircealunguの答えのわずかな改善:

string.match(/[^.?!]+[.!?]+[\])'"`’”]*/g);
  • 最初に開き括弧は必要ありません。
  • 、など'...'の句読点は文の中に含まれています。'!!!''!?'
  • 角かっこと閉じ括弧はいくつでも含まれています。[編集:異なる終了引用符が追加されました]
于 2019-04-07T04:38:36.087 に答える
3

ここでのMiaの回答の改善は、句読点のない終了文も含むバージョンです。

string.match(/[^.?!]+[.!?]+[\])'"`’”]*|.+/g)
于 2020-06-22T18:13:08.807 に答える