2017-01-12 9 views
-1

正規表現には本当に奇妙な問題があります。これは私の式である:正規表現はオンラインで一致しますが、実行時は一致しません。

const csrfRegex = /"csrf_token": "((\\"|[^"])*)"/ig;

これの目的は掻き取り、サイト上のJavaScriptオブジェクトからCSRFトークンを引き出すことです。ページの抜粋は次のとおりです。しかし、私のコードでは、一致を見つけることができませんhttps://regex101.com/r/zDxPFw/1

、および:

[...] 
<script type="text/javascript">window._sharedData = { "config": {"viewer": null, "csrf_token": "rYzP3AWdRFIoz9UJbyholRAX5QSiirCR"}, "display_properties_server_guess": {"viewport_width": 360, "pixel_ratio": 1.5}, "entry_data": {"LoginAndSignupPage": [{}]}, "platform": "web", "qe": {"discovery": {"p": {}, "g": ""}, "us": {"p": {"use_continue_text": "false"}, "g": "continue_vs_signup_text_control_03"}, "ebd": {"p": {}, "g": ""}, "gql": {"p": {}, "g": ""}, "freq": {"p": {}, "g": ""}, "br": {"p": {}, "g": ""}, "feed": {"p": {}, "g": ""}, "su_universe": {"p": {}, "g": ""}, "profile": {"p": {}, "g": ""}, "us_li": {"p": {}, "g": ""}}, "language_code": "en", "environment_switcher_visible_server_guess": true};</script> 
[...] 

私はRegex101を使用してオンラインそれをテストした場合、最初のキャプチャグループは、それを正しく一致しますifステートメントの内部に戻ります。

let csrf_scrape = csrfRegex.exec(body); 

// Both must have a length of at least 2 
if (!csrf_scrape || !csrf_scrape.length) { 
    console.log(body); 
    return next(`No CSRF token found`); 
} 

let csrf = csrf_scrape[1]; 
return next(null, csrf); 

これはどうして起こっているのですか?

+0

http://stackoverflow.com/help/mcve – melpomene

+1

csrf = csrf_scrape [0]?私は思っています... –

+0

主な問題はおそらく '/ g'フラグですが、コードの残りの部分を見ずには分かりません。 – melpomene

答えて

0

まず第一に、私はあなたが、内側catchedグループを必要としないと思うので、これは私が想像するに十分でなければなりません:

var csrfRegex = /"csrf_token": "((?:\\"|[^"])*)"/i; 

(?:)を使用すると、非キャプチャグループです。そして、あなたは簡単にそれをこのように得ることができます。

var value = text.match(csrfRegex)[1]; 

gフラグは、グループの値を返すためにstr.match()ために削除する必要があります。

関連する問題