Javascript регулярное выражение: использование переменных в шаблоне обратных ссылок? - PullRequest
3 голосов
/ 06 апреля 2011

У меня есть шаблон для поиска совпадений в строке запроса:

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

Но он работает не так, как задумано - кто-нибудь может помочь?

1 Ответ

3 голосов
/ 06 апреля 2011

Если вы решили создать регулярное выражение из строки, вам нужно удалить разделители (но тогда вам нужно удвоить любые обратные косые черты, если ваше регулярное выражение должно было содержать их). Попробуйте

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 + '=)([^&]*)')
...