0

相当简单的 HTML(省略号表示有更多代码):

...Profile">
 Some text
 </a>...

使用 JavaScript 的在线 RegEx 测试器(http://regexpal.com/),我可以使用以下表达式提取“一些文本”(注意它包含换行符):

(?=Profile">)[\s\S]*(?=</a)

(不幸的是,JavaScript 不支持look-behinds,所以我也提取了Something"> 以稍后删除它。但是,问题是下面的代码

var ShowContent = document.getElementById(id);
ShowContent = ShowContent.innerHTML;
var patt3=/Profile">[\s\S]*(?=<)/;
var GetName=patt3.exec(ShowContent);
alert(GetName);

不提取在线测试器显示的内容,但它还包括“某些文本”之后的整个 HTML 代码(IE,不仅是结尾< /a,还包括后面的所有内容)。

有没有人有什么建议?

4

2 回答 2

2

当您确定提供的字符串不包含可能的陷阱时(例如<input value='Profile">'>,替换[\s\S]*[^<]*(除了 a 之外的任何内容<):

var patt3 = /Profile">([^<]*)/;
var getName = patt3.exec(ShowContent);
getName = getName ? getName[1] : ''; // If no match has been found -> empty string

alert(getName);

(我也替换GetNamegetName,因为以大写字母开头的 camelCased 变量通常表示构造函数。遵守约定,不要以大写字母开头非构造函数)。

于 2012-04-15T19:38:01.617 回答
0

你可能会更好地使量词不贪婪。试试这个正则表达式:

/Profile">([\s\S]*?)(?=<)/
于 2012-04-15T22:28:45.160 回答