使用正则表达式匹配Javascript中的特定URL
仅当我位于具有随机子域的特定URL上时,我才想调用一些Javascript:https://*.testsite123.io/testsite123/portal//login。到目前为止,我想出了使用正则表达式匹配Javascript中的特定URL,javascript,regex,Javascript,Regex,仅当我位于具有随机子域的特定URL上时,我才想调用一些Javascript:https://*.testsite123.io/testsite123/portal//login。到目前为止,我想出了 function escapeRegExp(str) { var escaped = str.replace(/([.+?^=!:${}()|\[\]\/\\])/g, "\\$1"); console.log("escaped " + escaped); escaped = new R
function escapeRegExp(str) {
var escaped = str.replace(/([.+?^=!:${}()|\[\]\/\\])/g, "\\$1");
console.log("escaped " + escaped);
escaped = new RegExp(escaped);
return escaped;
}
function matchUrl() {
var currentUrl = window.location.toString();
var loginUrlRegex = escapeRegExp("https://*.testsite123.io/testsite123/portal/#/login");
return loginUrlRegex.test(currentUrl);
}
console.log("window.location " + window.location.toString());
console.log("match " + matchUrl());
启动时在chrome控制台中执行https://prod.testsite123.io/testsite123/portal//login 这将产生:
window.location https://prod.testsite123.io/testsite123/portal/#/login
escaped https\:\/\/*\.testsite123\.io\/testsite123\/portal\/#\/login
match false
我不知道他们为什么不匹配?除了*?之外,我已经转义了所有内容。您可以使用以下函数转义JavaScript中的正则表达式: 在正则表达式字符串中,包含了*,可能是子字符串的占位符。您需要使用正确的正则表达式变量,例如[^\.]+ 此外,您也在转义函数中转义不正确的*。除了实际的正则表达式模式之外,您需要转义所有内容。例如:
var regexString = escapeRegExp("https://") + '[^\\.]+' + escapeRegExp(".testsite123.io/testsite123/portal/#/login");
var regex = new RegExp(regexString);
var result = regex.test(window.location.toString());
console.log(result);
在上面的示例中,我使用了[^\\.]+而不是[^\.]+。这种转义只是因为如果在JavaScript字符串中使用未转义的\将导致JavaScript错误。JavaScript字符串的内容为[^\.]+仅一个\。这与上面的正则表达式转义不同。@ssc-hrep3。逃逸是正确的。测试应该是带有字符串的正则表达式对象,而不是带有正则表达式对象的字符串。如果你改变你的答案,我会把它标记为解决方案
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
function matchUrl() {
var currentUrl = window.location.toString();
var loginUrl =
escapeRegExp("https://") +
'[^\\.]+' +
escapeRegExp(".testsite123.io/testsite123/portal/#/login");
loginUrl = new RegExp(loginUrl);
return result = loginUrl.test(currentUrl);
}
if (matchUrl()) {
//doStuff()
}
使用RegExp文本来避免所有令人困惑的转义问题当你说特定url时,*在什么时候变得接近特定?https://*。???@dandavis我的URL有/所以我不知道我应该用任何其他文字转义它。@zer00ne抱歉,我是指带有随机子域的特定URL。子域是唯一改变的东西。我已经更新了问题。您应该尝试在星号上添加一个点+问号,如:*。?这将使它变得懒惰,这意味着它将接受任何事情,直到它看到这个结果为止。
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
function matchUrl() {
var currentUrl = window.location.toString();
var loginUrl =
escapeRegExp("https://") +
'[^\\.]+' +
escapeRegExp(".testsite123.io/testsite123/portal/#/login");
loginUrl = new RegExp(loginUrl);
return result = loginUrl.test(currentUrl);
}
if (matchUrl()) {
//doStuff()
}