正则匹配结尾带\的网址异常:浏览器与regex101结果不一致
问题分析与解决
首先明确核心问题:你看到匹配结果里的\\,其实是浏览器控制台的转义显示效果——控制台会把单个\自动显示成\\,并非真的匹配到了两个反斜杠。但如果确实要精准匹配以单个\结尾的网址,还得理清网页内容的实际情况:
- 若网页源码是
"https://de.wikipedia.org\"这种写法,浏览器解析DOM后,innerHTML里不会保留转义引号的那个\,只会留下https://de.wikipedia.org",这种场景下你根本匹配不到\; - 只有当网页源码里是
"https://de.wikipedia.org\\"时,innerHTML里才会存在单个\,正则才能正常匹配。
给你修正后的简洁版正则,避免原写法的冗余问题:
// 正则字面量写法,匹配以单个\结尾的http/https网址 const regex = /https?:\/\/[\w.-]+(?:\/[\w\/=-]+)?\\/g; const websites = document.documentElement.innerHTML.match(regex); console.log(websites);
如果用new RegExp构造函数,注意字符串里的反斜杠需要双重转义:
const regex = new RegExp('https?:\\/\\/[\\w.-]+(?:\\/[\\w\\/=-]+)?\\\\', 'g');
原正则的冗余点说明:比如h[\w]+可简化为https?(精准匹配http/https),[\:\/\/]+没必要加加号,直接写:\/\/即可,多余的字符组和加号会导致匹配无效的重复内容。
内容的提问来源于stack exchange,提问作者zerfaezza
相关产品推荐
相关产品推荐

