所以我经历了几个例子,这看起来应该很简单,但似乎没有什么工作。
我从电子邮件中提取html文件并尝试使用REGEXP解析它。我目前正在处理的这条线是:
MyClass.class.getClassLoader().getResource("src/main/resources/myTemplateResource.json");
整个文档中都有很多标签。
我使用regexr.com进行测试。
我能够提出的最接近的表达是:
<br><br><b>STATUS:</b> Cancel<br><br><b>
当我使用它时,它会返回:
(?:STATUS:<\/b> )(.*?)(?=<)
我只想尝试取消&#34;取消&#34;。我已经看到使用lookbehind回答了其他问题,但JavaScript中不支持这些问题。有没有解决这个问题,或者我是以错误的方式接近这个?
我试图通过Google Web App提取信息。
到目前为止我所学到的内容取决于浏览器如何显示信息,如果您看到&#34;&lt;&#34;或实际&#34;&lt;&#34;为了便于查看,我将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);
答案 0 :(得分:0)
您的正则表达式似乎有效,只需提取match[1]
:
let str = "<br><br><b>STATUS:</b> Cancel<br><br><b>"
console.log( str.match(/(?:STATUS:<\/b> )(.*?)(?=<)/)[1]) // "Cancel"
&#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