Regex101验证通过的URL正则在JS中失效,含s字符串不匹配
问题原因与解决方案
核心问题
你的正则在JavaScript中失效的关键原因是:使用RegExp构造函数时,字符串参数里的正则元字符需要双重转义。
你当前代码里的[^\s\/$.?#],在字符串字面量中\s会被直接解析成普通字符s,导致这个字符组的含义变成「匹配除s、/、$、.、?、#之外的任意字符」——这就难怪带s的URL(比如https)会直接匹配失败。
两种修复方案
方案1:修正RegExp构造函数的转义
把正则里的\s改为\\s,让RegExp正确识别为空白字符的元字符:
let DestinationRegex = new RegExp('^(https?|ftp):\\/\\/[^\\s\\/$.?#][^\\s$]*$'); if (DestinationRegex.test("https://atlas.mapmyindia.com")) { console.log("Yeahhhhhhh") } else { console.log("Nahhhhlh") }
方案2:使用正则字面量(更推荐)
正则字面量不需要额外转义反斜杠,代码更简洁且不易出错:
let DestinationRegex = /^(https?|ftp):\/\/[^\s\/$.?#][^\s$]*$/; if (DestinationRegex.test("https://atlas.mapmyindia.com")) { console.log("Yeahhhhhhh") } else { console.log("Nahhhhlh") }
补充说明
你在测试平台上验证正常,是因为那里直接编写的是正则表达式本身,而非字符串形式,所以\s可以直接被识别为空白字符,不需要额外转义。
内容的提问来源于stack exchange,提问作者Tushar Rawat
相关产品推荐
相关产品推荐

