使用JavaScript的RegEx匹配应该更多

时间:2012-04-15 19:27:22

标签: javascript regex html-parsing

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

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

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

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

(不幸的是,JavaScript不支持后视镜,所以我也提取了Something“&gt;以便稍后删除它。但问题是,下面的代码

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

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

有人有任何建议吗?

2 个答案:

答案 0 :(得分:2)

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

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

alert(getName);

(我还用GetName替换getName,因为以大写字母开头的camelCased变量通常表示构造函数。坚持约定,不要用大写字母启动非构造函数。

答案 1 :(得分:0)

你可能最好不要使量词不合适。试试这个正则表达式:

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