2009-11-19 151 views
-1

我如何删除从文本中的Java脚本块中的最后一行,而不使用循环块的最后一行。(仅使用正则表达式) 例如,正则表达式来删除文本

“互联网是一个全球性的该系统使用标准互联网协议套件(TCP/IP)为全球数十亿用户提供服务,是一个由数百万私人和公共,学术,商业和政府网络组成的网络网络。

最后一行总是有“& &”。

+1

“最后一行”作为最后一句? – 2009-11-19 05:08:18

+0

@Sidharth:你能告诉我们你期待的结果吗? – RageZ 2009-11-19 05:08:34

+0

你问的是如何删除最后一句,或者只是“&&”或字面意思是最后一行(我认为这会是这样的“\ n。* && $”)? – zfedoran 2009-11-19 05:10:32

回答

4
var str = "The ... and government networks&&"; 
str.replace(/\.[^.]+&&$/,'.'); 

如果按最后一行您是指最后一句。最后一句不包含句点。

+0

请你能解释 – Sidharth 2009-11-19 05:19:07

+0

@Sidharth:搜索。在任何不是“&&”的点后,应该在字符串的末尾...... – RageZ 2009-11-19 05:21:22

+0

找到一个句点(\。),后面跟着&&,然后是尽可能多的句点([^。] +)和字符串($)的结尾。 ('')替换这个位置的东西。 /围绕什么看起来像一个字符串的第一个参数是一个模式,而不是一个字符串。 – Don 2009-11-19 05:23:51

1

如果你需要新的生产线有“电脑新线”

var str = "he ... and government networks&&"; 
str.replace(/\n[^\n]*&&$/,''); 
1

喜欢这个?

"First Line\n.sth.&&.\nAnother\nLast Line&&Last Word".replace(/\n.*&&.*$/,''); 

结果

First Line 
..sth.&&. 
Another 

根据您的问题,最后一行总是有 “& &”。,这并不意味着必须以& &结束,对不对?其他线路也可以有& &。

1

您的文字中有没有换行,所以我想你的意思是删除最后一个sentence-

string.replace(/\.[^\.]+\.?$/,'.'); 

If you want to be sure not to remove the only sentence, use 

string.replace(/(\S+\.)[^\.]+\.?$/,'$1') 

您将需要一些较重的提升,以避免切断有缩写与时间线,像先生琼斯,斯波克博士,琼斯夫人和圣安德鲁。就像在截肢之前删除他们的期限并在之后替换它们一样。 (为便于阅读,在此分割)

string= string.replace(/\b(Mr|Dr|Mrs|St)\. /g,'$1 ') 
.replace(/(\S+\.)[^\.]+\.?$/,'$1').replace(/\b(Mr|Dr|Mrs|St) +/g,'$1. ') 
+0

解析HTML是不受欢迎的常用表达。解析自然语言是不可能的。 – Kobi 2009-11-19 09:42:29

1

如果您的文本没有换行符,则“最后一行”不存在。它只在浏览器中显示时才存在,但不作为文本的一部分。虽然你坚持“只使用正则表达式”,但正则表达式找不到它。
如果您使用fixed width font,您可以避开它,但这不太可能。你也可以循环,直到达到目标高度,但这是不希望的。

一个更好的方法来使用CSS。下面是一个简化版本,显示了前两行和隐藏休息:

p.TwoLines { 
    overflow: hidden; /* no scroll bars */ 
    font-size: 10pt; /* here I have a fixed size, for example */ 
    line-height: 1.5; 
    height: 30pt /* 1.5*2lines *10sizeofline */; 

    width: 300px; /* not needed, just to see the effect */ 
} 

前瞻:http://jsbin.com/ufihe3