繁体   English   中英

如何获得带有匹配正则表达式的多行文本的最后一行?

[英]How to get last line of multiline text with matching regex?

我现在正在寻找几个小时如何获取多行文本的最后一行。

例如:

Lorem ipsum dolor sit amet, 
Praesent libero. Sed cursus ante 
dapibus diam. Sed nisi. Nulla  
imperdiet. Duis sagittis ipsum. 

我会得到:

imperdiet. Duis sagittis ipsum.

我尝试过像这样的正则表达式:

var y = x.match(/[\S]+$/);

但它返回:

null

如何在javascript中使用正则表达式获取多行文本的最后一行?

谢谢。

我对Regex不好。

但是,要回答这个问题,您可以使用split('\\n')

var myText = <your multi line text>;
var lines = myText.split('\n');
console.log(lines[lines.length - 1]); // This should print last line

根据您的JSFiddle,您必须采取倒数第二行,因为最后一行是EMPTY

var x=document.getElementsByTagName('p')[0].innerHTML;
var y = x.split('\n');
alert(y[y.length - 2]);

[\\S]+$ (对于\\S+$来说很长),表示匹配字符串末尾的所有非空格。

由于您的字符串在最后一行的末尾有一个空格,因此不匹配任何内容。

即使您删除了该尾随空格,它也只会匹配ipsum.

只需使用: .*$

这取决于事实. 默认情况下不匹配换行符(?s)可以在需要时进行更改)

因此,它将匹配从最后一个换行符到字符串结尾的所有字符。

有关示例 ,请参见regex101.com


现在,如果文本在最后一行之后有一个或多个换行符,那么它实际上并不是最后一行,请改用.*\\s*$ 参见演示

若要不捕获末尾的空行,请使用捕获组捕获最后一个非空行: (.*)\\s*$ 参见演示

使用正则表达式,您可以执行此操作

var text = your text goes here;
var regex = /\n.*$/;
match = regex.exec(text);
console.log(match[0].slice(1));

检查以\\n (换行符)开头,然后以\\n以外的结尾结束的匹配项,该匹配项将为您提供最后一行。 最后,只需从匹配项中删除第一个字符,因为它将是开始\\n (前一行的最后一个字符)。

请注意,这仅在文本实际上是多行-包含\\n时才有效,因此您也应该首先测试它。

if (text.indexOf('\n') == -1) return text;

如果为空,则应使用(.+)([^\\s])忽略最后一行:

对于多段:

 var u = document.getElementsByTagName('p'); for (var i = 0; i < u.length; i++) { var z = u[i].innerHTML.match(/(.+)([^\\s])/g); console.log(z[z.length - 1]); } 
 <p> Lorem ipsum dolor sit amet, Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla imperdiet. Duis sagittis ipsum. </p><p> Lorem ipsum dolor sit amet, Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla imperdiet. Duis sagittis ipsum. </p><p> Lorem ipsum dolor sit amet, Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla imperdiet. Duis sagittis ipsum. </p><p> Lorem ipsum dolor sit amet, Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla imperdiet. Duis sagittis ipsum. </p> 

对于单人:

 var x=document.getElementsByTagName('p')[0].innerHTML; var y = x.match(/(.+)([^\\s])/g); console.log(y[y.length -1]); 
 <p>Lorem ipsum dolor sit amet, Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla imperdiet. Duis sagittis ipsum. </p> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM