web-dev-qa-db-ja.com

テキストを文に分割し、区切り文字を保持するためのJavascript RegExp

私はjavascriptの分割を使用して文字列から文を取得しようとしていますが、区切り文字は!?などにしておきます。

これまでのところ

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

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

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

23
daktau

分割せずに一致を使用する必要があります。

これを試して。

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);
57
Larry Battle

以下は、ラリーの回答への小さな追加です。これは、副次的な文章にも一致します。

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!!!"]
9
mircealungu

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

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

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

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

5
rgvcorley

Mircealunguの回答を少し改善しました。

string.match(/[^.?!]+[.!?]+[\])'"`’”]*/g);
  • 最初に左括弧は必要ありません。
  • '...''!!!''!?'などの句読点は文内に含まれます。
  • 任意の数の角括弧と右括弧が含まれます。 [編集:別の終了引用符を追加]
0
Mia Chen