2012-06-27 64 views

回答

4

我把比赛方法,而不是分裂。它可能更紧张(例如,如果句子以...等结尾,那该怎么办)。

text.match(/\(?[A-Z][^\.]+[\.!\?]\)?(\s+|$)/g); 

http://jsfiddle.net/DepKF/1/

+1

你很可能使用'match',因为JS没有一个分隔符捕捉选项为'分裂'。 – chaos

+0

我应该提到的一个好点。 – Utkanos

+0

是的,你可以使用拆分。但是你需要一个前瞻(那个没有捕获组) 'text.split(/ \ b(?![\?\。\!\])/);' – bavo

1

@Utkanos你的想法是好的,但我认为replace可以更好地:

text.replace(/\(?[A-Z][^\.]+[\.!\?]\)?/g, function (sentence) { 
    output += '<p>'+ sentence + '</p>'; 
}); 

http://jsfiddle.net/juGT7/1/

您无需再次循环。

+0

我没有想过如果沿着这条路线走下去。非常感谢,但我需要以后的其他事情循环。 –

+0

@wiky - 我确实给了这个方法一些想法,但最终没有计算保存,因为有一个循环 - 在这种情况下,循环是迭代回调。 – Utkanos

1

使用(?=模式)前瞻图案在正则表达式 例如

var string = '500x500-11*90~1+1'; 
string = string.replace(/(?=[$-/:-?{-~!"^_`\[\]])/gi, ","); 
string = string.split(","); 

这会给你以下结果。

[ '500x500', '-11', '*90', '~1', '+1' ] 

也可直接拆分

string = string.split(/(?=[$-/:-?{-~!"^_`\[\]])/gi); 

给予同样的结果

[ '500x500', '-11', '*90', '~1', '+1' ]