私はjavascriptの分割を使用して文字列から文を取得しようとしていますが、区切り文字は保持しています(例:!?)。
これまでのところ私は
sentences = text.split(/[\\.!?]/);
これは機能しますが、各文の終了句読点は含まれません(。!?)。
誰かがこれを行う方法を知っていますか?
私は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);
'...'
の句読点は文の中に含まれています。'!!!'
'!?'
ここでのMiaの回答の改善は、句読点のない終了文も含むバージョンです。
string.match(/[^.?!]+[.!?]+[\])'"`’”]*|.+/g)