2016-04-27 85 views
0

我有这个字符串:正则表达式表达删除开始到结束字符字符串

var string = "From: Jeremy<br /> 
Sent: 22 Apr 2016 12:08:03</br /> 
To: Mark<br /> 
Subject: Another test email<br /><br /> 

Hi Mark, 
<br /> 
I'm sending this email as a way to test the email! 
<br /> 
Cheers, 
<br /> 
Jeremy" 

而且我想,所以我得到的电子邮件正文拼接从一开始这个字符串直到“主题”行之后内容。

我已经试过这至今:

string.substring(string.lastIndexOf('Subject'), string.length - 1) 

但这个选项不会从字符串返回主题行也是如此。

有没有我可以使用的正则表达式库?

+0

你知道你不能传播的字符串横跨在JS多行不以'+'右串联?刚刚格式化为SO? – ann0nC0d3r

+0

@ annOnC0d3r是的,这只是数据库返回的字符串。只是用它作为清晰的例子。感谢您的评论,但是,帮助我改进我表达我的代码/问题 –

回答

3

使用string.replace你可以这样做:

var body = string.replace(/^[\s\S]*\s+Subject: [^\n]*\n+/, '') 

代码:

var string = `From: Jeremy<br /> 
 
Sent: 22 Apr 2016 12:08:03</br /> 
 
To: Mark<br /> 
 
Subject: Another test email<br /><br /> 
 

 
Hi Mark, 
 
<br /> 
 
I'm sending this email as a way to test the email! 
 
<br /> 
 
Cheers, 
 
<br /> 
 
Jeremy` 
 

 
var body = string.replace(/^[\s\S]*\s+Subject: [^\n]*\n+/, '') 
 

 
document.writeln("<pre>" + body + "</pre>")

[\s\S]*匹配0或多个任意字符,包括换行符。之后是Subject:也被删除。

输出:

"Hi Mark, 
<br /> 
I'm sending this email as a way to test the email! 
<br /> 
Cheers, 
<br /> 
Jeremy" 
+1

的方式,它的工作就像一个魅力!非常感谢!! –

0

有人会给你非正则表达式的解决方案,但这里是一个用正则表达式

[\s\S]*Subject\s*:.*([\s\S]+) <-- your result in first capturing group 

Regex Demo

JS演示

var re = /[\s\S]*Subject\s*:.*([\s\S]+)/gm; 
 
var str = `From: Jeremy<br /> 
 
Sent: 22 Apr 2016 12:08:03</br /> 
 
To: Mark<br /> 
 
Subject: Another test email<br /><br /> 
 

 
Hi Mark, 
 
<br /> 
 
I'm sending this email as a way to test the email! 
 
<br /> 
 
Cheers, 
 
<br /> 
 
Jeremy` 
 
var m = re.exec(str); 
 
document.writeln("<pre>" + m[1] + "</pre>");

+2

从@anubhava复制了一些部分(不是正则表达式) – rock321987

+1

确实这个例子提供了我需要的解决方案!谢谢 –

相关问题