-1

我知道 RegEx 不应该用于解析 HTML,但我无法使用任何其他解决方案,所以我坚持这个我为 URI.js 得到了这个:

/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’&amp;quote]))/ig

但是它不能很好地工作,所以我想添加一个前缀,只搜索以href=开头的字符串

结束了这样的事情(在 RegEx 测试器中工作):

href\=\"\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’&amp;quote]))

但是在编译时,它会抛出“非法字符”错误。不确定是否是 " 或 = 导致了这种情况。

JS代码:

matches_temp = result_content.match(href\=\"\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’&amp;quote])));

result_content 取自数据库。

4

1 回答 1

0

你需要斜杠来表示这是一个正则表达式,就像引号表示这个值是一个字符串一样。所以 .match(regex) 应该是 .match(/regex/)。看一看:

var result_content = '<a href="http://www.google.com">blah</a>';


var matches_temp = result_content.match(/href\=\"\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’&amp;quote]))/);
console.log(matches_temp[1]);

于 2019-02-25T13:40:23.223 回答