正则表达式以搜索href =“ something”模式

时间:2019-02-25 13:16:06

标签: javascript regex

我知道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`!()\[\]{};:'".,<>?«»“”‘’&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`!()\[\]{};:'".,<>?«»“”‘’&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`!()\[\]{};:'".,<>?«»“”‘’&quote])));

result_content来自数据库。

1 个答案:

答案 0 :(得分: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`!()\[\]{};:'".,<>?«»“”‘’&quote]))/);
console.log(matches_temp[1]);