2017-03-27 11 views
1

私は、文字列(href属性の値である)このような持っている:それはまた時々これらのように見えます特定のパラメータをURLとどのように一致させることができますか?

var url = '/myweb/search?s=islamic_sources&q=test'; 

を:

url = '/myweb/search?q=test'; 
url = '/myweb/search?q=test&g=sth'; 

Here

^[^?]+.*?&?q=([^$|&]+) 

です私がこれまでに試したことは、これらの3行にtestと一致させる必要があります。しかし、悲しいことに$が私のパターンで行末を意味するとは思われません。どうすれば修正できますか?

+0

あなたは、この正規表現を選んだ理由は非常に明確ではありません。デモで '\ n 'が追加されているので、[' \ bq =([^&] +)(?!。* \?) '](https://regex101.com/r/xuRvUs/1)複数行の文字列です)。 '(?!。* \?)'はここではクエリ文字列の外のすべての一致に失敗します。 –

+0

Regexは扱いにくいですが、他の誰かが同じように書式設定された文字列でクエリ変数にアクセスする方法は次のとおりです。 http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript –

+0

これに従う - https://gist.github.com/marmeladze/f693501707940b1ea1af433c327800a9 – marmeladze

答えて

0

あなたは、単に使用することができます。

url.match(/q=([^&]*)/) 

これは配列を返します。空でない場合は、testはインデックス1で

var url1 = '/myweb/search?s=islamic_sources&q=test'; 
 
var url2 = '/myweb/search?q=test'; 
 
var url3 = '/myweb/search?q=test&g=sth'; 
 

 
console.log(url1.match(/q=([^&]*)/)[1]); 
 
console.log(url2.match(/q=([^&]*)/)[1]); 
 
console.log(url3.match(/q=([^&]*)/)[1]);

0

正規表現は/q=[^&]+/あるだろうし、最初の一致を取る、urlでそれを実行し、その後、第二の部分を取り、=でそれを分割します。

私は以下の関数として作成しました。

var url1 = '/myweb/search?s=islamic_sources&q=test'; 
 
var url2 = '/myweb/search?q=test'; 
 
var url3 = '/myweb/search?q=test&g=sth'; 
 

 
function retMatch(url){ 
 
    var re=/q=[^&]+/; 
 
    return re.exec(url1)[0].split('=')[1]; 
 
} 
 
console.log(retMatch(url1)); 
 
console.log(retMatch(url2)); 
 
console.log(retMatch(url3));

関連する問題