正则表达式删除文本块的最后一行

时间:2009-11-19 05:04:56

标签: javascript regex

如何在不使用循环的情况下从java脚本中的文本块中删除最后一行。(仅使用正则表达式) 例如,

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

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

5 个答案:

答案 0 :(得分:4)

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

如果是最后一行你的意思是最后一句话。最后一句不包含句号。

答案 1 :(得分:2)

你的文字中没有换行符,所以我猜你的意思是删除最后一句 -

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. ')

答案 2 :(得分:1)

如果您需要新行有“计算机新行”

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

答案 3 :(得分:1)

喜欢这个吗?

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

结果

First Line
..sth.&&.
Another

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

答案 4 :(得分: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