我想创建一个只解析符合当前域的链接的正则表达式。我想知道我是否可以在 Javascript 正则表达式对象中使用类似 {hostname} 的东西,这样它就会将搜索锁定到仅针对当前页面特定域的那些链接。
例如:如果域是 www.domain.com,它将仅搜索以该特定域开头的链接。如果域是 anotherdomain.com,它将仅搜索以该特定域开头的链接。我的正则表达式更复杂,但我希望能够放置某种将被当前域替换的全局变量。
我想创建一个只解析符合当前域的链接的正则表达式。我想知道我是否可以在 Javascript 正则表达式对象中使用类似 {hostname} 的东西,这样它就会将搜索锁定到仅针对当前页面特定域的那些链接。
例如:如果域是 www.domain.com,它将仅搜索以该特定域开头的链接。如果域是 anotherdomain.com,它将仅搜索以该特定域开头的链接。我的正则表达式更复杂,但我希望能够放置某种将被当前域替换的全局变量。
您可以通过 Location 对象检索当前页面的主机名:
var hostname = window.location.hostname;
然后你可以通过将它连接到你的正则表达式中来使用该变量来组成你的正则表达式:
var re = new RegExp("<start of your regex>" + hostname + "<end of your regex>");
您可以从中获取主机名window.location.hostname
。
然后,您将希望转义主机名中潜在的特殊字符。
主机名通常会包含.
哪些是正则表达式中的特殊字符,当然也可以包含-
哪些可以是特殊字符。
可能最好从事防御性编程并逃避正则表达式中可能是特殊字符的所有内容,即使它们中的许多实际上不应该出现。从用于 Javascript 正则表达式的转义字符串中,您可以使用此函数:
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
然后你可以这样做:
var regexpFragment = escapeRegExp(window.location.hostname);