Javascript regexp:在反向引用模式中使用变量?

时间:2011-04-06 11:35:16

标签: javascript regex backreference

我有一个模式可以在查询字符串中找到匹配项:

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

我希望能够做的是使用变量值作为匹配的参数:

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

[edit]以下是代码使用方式的上下文:

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;
        }

但它没有按预期工作 - 任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

如果您选择从字符串构造正则表达式,则需要删除分隔符(但如果正则表达式包含任何反斜杠,则需要加倍任何反斜杠)。尝试

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

您是否知道这也会与thing=another中的url.com/foo/bar?something=another相匹配?为避免这种情况,请添加单词边界锚:

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