Если мы рассмотрим ваше регулярное выражение по одному токену за раз, вот что это значит:
= matches a literal equal sign
.+? matches an optional string that has at least one character in it
\\ matches a literal backslash
& matches a literal ampersand
Среди других проблем, это требует, чтобы литеральная обратная косая черта sh была во входной строке, и требует строка заканчивается амперсандом. Также .+?
может быть сокращено до .*
, но все равно неправильно, поскольку оно может включать амперсанды и знаки равенства в совпадающей строке.
Кроме того, нет необходимости заменять функцией, например JavaScript может делать то, что вы делаете, просто заменив строку.
У лучшего регулярного выражения могут быть следующие токены:
= matches a literal equal sign
[^&]* matches a string (possibly empty) that does not contain ampersands
&? matches an optional ampersand
Как указывал Wiktor выше, все это можно объединить, как это :
s = s.replace(/=([^&]*)&?/g, '="$1" ').trim();
Здесь круглые скобки используются для обозначения части сопоставляемого шаблона, который заменяется, $1
используется для обозначения отмеченной части рисунка в скобках, а .trim()
удаляет завершающий пробел.