2017-03-25 6 views
0

ランダムサブドメインの特定のURL(https://*.testsite123.io/testsite123/portal/#/login)を使用している場合にのみ、JavaScriptを呼び出す必要があります。これまでのところ、私はしばらくhttps://prod.testsite123.io/testsite123/portal/#/loginにクロームコンソールで実行Javascriptの特定のURLとRegexとの照合

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

思い付いたこの利回り:

window.location https://prod.testsite123.io/testsite123/portal/#/login 
escaped https\:\/\/*\.testsite123\.io\/testsite123\/portal\/#\/login 
match false 

一致していない理由を私は知らないのですか?私は*以外のすべてをエスケープしましたか?

+1

あなたが '' *特定に近いものになったのどの時点で*「特定のURL」*を言うときに使用する正規表現リテラルは、すべての混乱エスケープ問題 – dandavis

+0

を避けるために? 'https:// *。' ??? – zer00ne

+0

@dandavis私のURLには '/'と '# 'がありますので、他のリテラルについてはわかりません。 – mles

答えて

1

あなたのJavaScript(source)で正規表現逃れるために、次の機能を使用することができます:あなたの正規表現文字列で

function escapeRegExp(str) { 
    return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 
} 

を、あなたはおそらく、サブストリングのプレースホルダとして、*が含まれています。正規表現の正規表現を使用する必要があります(例: [^\.]+

さらに、escape()機能の(間違った)*をエスケープしています。実際の正規表現パターン以外のすべてをエスケープする必要があります。したがって、このための例は次のようになります。

上記の例で
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文字列の内容は、[^\.]+(1つだけ\)です。これはではなく、です。上にエスケープする正規表現と同じエスケープです。

0

@ ssc-hrep3。エスケープは正しい。テストは、regexオブジェクトの文字列ではなく、文字列を含む正規表現オブジェクトでなければなりません。あなたがあなたの答えを変えたら、それを解決策としてマークします。

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

はい、そうです、それはバグでした。それを私が直した。 –

関連する問題