我正在尝试使用javascript的split来从字符串中获取句子,但保留分隔符,例如!?。
到目前为止我已经
了sentences = text.split(/[\\.!?]/);
有效,但不包括每个句子的结尾标点符号(。!?)。
有谁知道这样做的方法?
答案 0 :(得分:48)
您需要使用匹配而不是拆分。
试试这个。
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);
答案 1 :(得分:8)
以下是拉里答案的一个小补充,它也将与括号句子相匹配:
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!!!"]
答案 2 :(得分:5)
请尝试以下方法: -
sentences = text.split(/[\\.!\?]/);
?
是正则表达式中的特殊字符,因此需要进行转义。
抱歉,我想念你的问题 - 如果你想保留分隔符,那么你需要使用match
而不是split
看this question
答案 3 :(得分:2)
在Mia的答案上,改进了一个版本,该版本还包括不带标点的结尾句子:
string.match(/[^.?!]+[.!?]+[\])'"`’”]*|.+/g)
答案 4 :(得分:0)
mircealungu的回答略有改善:
string.match(/[^.?!]+[.!?]+[\])'"`’”]*/g);
'...'
,'!!!'
,'!?'
等标点符号。