私はjavascriptの分割を使用して文字列から文を取得しようとしていますが、区切り文字は!?などにしておきます。
これまでのところ
sentences = text.split(/[\\.!?]/);
これは機能しますが、各文の末尾の句読点(。!?)は含まれません。
誰かがこれを行う方法を知っていますか?
分割せずに一致を使用する必要があります。
これを試して。
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);
以下は、ラリーの回答への小さな追加です。これは、副次的な文章にも一致します。
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!!!"]
代わりにこれを試してください:-
sentences = text.split(/[\\.!\?]/);
?
は正規表現の特殊文字であるため、エスケープする必要があります。
申し訳ありませんが、質問を読んでいません。区切り文字を保持したい場合は、match
ではなくsplit
を使用する必要があります。参照 この質問
Mircealunguの回答を少し改善しました。
string.match(/[^.?!]+[.!?]+[\])'"`’”]*/g);
'...'
、'!!!'
、'!?'
などの句読点は文内に含まれます。