Javascript регулярное выражение: использование переменных в шаблоне обратных ссылок?
У меня есть шаблон для поиска совпадений в строке запроса:
'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 ответ
Решение
Если вы решите создать регулярное выражение из строки, вам нужно отбросить разделители (но тогда вам нужно удвоить любые обратные косые черты, если ваше регулярное выражение будет содержать их). Пытаться
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 + '=)([^&]*)')