2011-04-06 35 views
3

我有一個模式來查找在查詢字符串匹配:Javascript正則表達式:在反向引用模式中使用變量?

'url.com/foo/bar?this=that&thing=another'.replace(/(thing=)([^&]*)/, '$1test') 

我想什麼,能夠做的是使用變量值作爲參數去匹配,如:

'url.com/foo/bar?this=that&thing=another'.replace('/(' + key + '=)([^&]*)/', '$1test') 

[編輯]這裏是如何使用代碼的上下文:

GetSrcParam: function(key, value) { 
      var newSrc = $(this._image).attr('src'), 
       pattern = '(' + key + '=)([^&]*)'; 

      if (newSrc.match(pattern) == null) 
       newSrc += '&' + key + '=' + value; 
      else 
       newSrc = newSrc.replace(newSrc, '$1' + value); 

      return newSrc; 
     } 

但它沒有按預期工作 - 任何人都可以幫忙嗎?

+0

歡迎來到SO。請使用代碼格式(您只需按下一個按鈕)。 - 也請提供一些JS代碼,而不僅僅是模式本身。問題可能在於如何準備模式。 – vbence 2011-04-06 11:38:30

+0

道歉,沒有注意到 - 已經更新了js正在(或將要)使用的上下文。 – 2011-04-06 11:43:55

回答

3

如果選擇從字符串中創建一個正則表達式,你需要刪除分隔符(但你需要加倍任何反斜槓,如果你的正則表達式是包含任何)。儘量

myregex = new RegExp('(' + key + '=)([^&]*)') 
'url.com/foo/bar?this=that&thing=another'.replace(myregex, '$1test') 

你知道,這也將匹配url.com/foo/bar?something=anotherthing=another?爲避免出現這種情況,請添加文字邊界錨點:

myregex = new RegExp('(\\b' + key + '=)([^&]*)') 
+0

輝煌,謝謝:) – 2011-04-06 11:57:23

相關問題