Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式匹配Javascript中的特定URL_Javascript_Regex - Fatal编程技术网

使用正则表达式匹配Javascript中的特定URL

使用正则表达式匹配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

仅当我位于具有随机子域的特定URL上时,我才想调用一些Javascript:https://*.testsite123.io/testsite123/portal//login。到目前为止,我想出了

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()
}