正则表达式匹配字符串末尾的子表达式

时间:2011-07-10 18:43:22

标签: javascript regex

我正在尝试测试字符串中的结束模式是否为html结束标记(假设尾随空格被修剪)。

var str1 = "<em>I</em> am <strong>dummy</strong> <em>text.</em>"; //ends with html close tag
var str2 = "<em>I</em> am <strong>dummy</strong> <strong>text.</strong>"; //ends with html close tag
var str3 = "<em>I</em> am <strong>dummy</strong> text"; //does not end with html close tag

使用上面的str1,我想获得结束标记的位置,这是一个。以下是我的尝试:

var rgx1 = /(<\/em>)$/g; // works. basic scenario. matches closing </em> tags at the end of the string.
var rgx2 = /<\s*\/\s*\w\s*.*?>/g; //matches html closing tags.
var rgx3 = /<\s*\/\s*\w\s*.*?>$/g; //doesn't work. supposed to match closing html tag at the end of the string

console.log(str.search(rgx1))

虽然rgx1正确返回结束标记的位置,并且rgx2通常正确地返回结束html标记的位置,但我正在尝试获得一个广义正则表达式,它将返回结束字符串的任何html标记的位置。为什么rgx3不工作?

2 个答案:

答案 0 :(得分:1)

应该只使用一个负的char类来匹配任何不是结束的&gt;

var rgx = /<\/[^>]+>$/g;

至于为什么rgx3不起作用...你的模式不是很好但它应该在技术上匹配...如果它不能与那里的$一起工作,那么你匹配的字符串可能没有像你想象的那样被修剪(或者除了关闭html标签之外的其他东西)

答案 1 :(得分:0)

似乎rgx2和rgx3可能存在问题 - 额外的。*?在&gt;之前在\ w之后缺少* - 这是我如何编写正则表达式。 rgx2工作的事实是因为匹配全部(。*)

var rgx2 = /<\s*\/\s*\w*\s*>/g;
var rgx3 = /<\s*\/\s*\w*\s*>$/g;