两个字符串之间的JavaScript Regexp而不捕获第一个字符串

时间:2017-07-06 14:45:55

标签: javascript html regex

所以我经历了几个例子,这看起来应该很简单,但似乎没有什么工作。

我从电子邮件中提取html文件并尝试使用REGEXP解析它。我目前正在处理的这条线是:

MyClass.class.getClassLoader().getResource("src/main/resources/myTemplateResource.json");

整个文档中都有很多标签。

我使用regexr.com进行测试。

我能够提出的最接近的表达是:

<br><br><b>STATUS:</b> Cancel<br><br><b>

当我使用它时,它会返回:

(?:STATUS:<\/b> )(.*?)(?=&lt)

我只想尝试取消"取消"。我已经看到使用lookbehind回答了其他问题,但JavaScript中不支持这些问题。有没有解决这个问题,或者我是以错误的方式接近这个?

修改

我试图通过Google Web App提取信息。

到目前为止我所学到的内容取决于浏览器如何显示信息,如果您看到"<"或实际"<"为了便于查看,我将REGEXP中的角色转移到:

STATUS:</b> Cancel

我试图解释的路线是:

(?:<b>STATUS:<\/b>)(.*?)(?=<br>)

这是我用来运行REGEXP的代码:

<b>STATUS:</b> Cancel<br>

当我尝试运行它时,我得到同样的东西

var re = new RegExp('(?:<b>STATUS:<\/b> )(.*?)(?=<br>)');
var status = messages[i].getBody().match(re)[1];
var child = XmlService.createElement('Status').setText(status);
root.addContent(child);

2 个答案:

答案 0 :(得分:0)

您的正则表达式似乎有效,只需提取match[1]

&#13;
&#13;
let str = "&lt;br&gt;&lt;br&gt;&lt;b&gt;STATUS:&lt;/b&gt; Cancel&lt;br&gt;&lt;br&gt;&lt;b&gt;"

console.log( str.match(/(?:STATUS:&lt;\/b&gt; )(.*?)(?=&lt)/)[1]) // "Cancel"
&#13;
&#13;
&#13;

答案 1 :(得分:0)

好吧,我想我明白了。并为任何困惑道歉。

我不确定这是否是某个地方的错误,但如果您在前瞻后添加括号,则REGEXP会起作用。实际的单词将返回第三个位置或匹配[2]

/(?:(<b>STATUS:<\/b> ))(.*?)(?=<br>)/

这对我有用:

var re = new RegExp('(?:(<b>STATUS:<\/b> ))(.*?)(?=<br>)');
var status = messages[i].getBody().match(re)[2];
var child = XmlService.createElement('Status').setText(status);
root.addContent(child);

这是一个答案,但对我来说没有多大意义。如果有人可以解释被拉的内容,那将非常感激。

match[0] = "<b>STATUS:</b> Cancel"
match[1] = "<b>STATUS:</b> "
match[2] = "Cancel"
match[3] = null