Регулярное выражение выглядит так:
var string = 'callback&user_story=1&user_story=2&user_story=100&user_story=a&user_story=john';
var re = /&user_story=.*?(?=&|$)/g
console.log(string.replace(re, ""));
В разбивке:
/&user_story=.*?(?=&|$)/g
&user_story=
- проверяет, начинается ли совпадение с "&user_story="
.*?
- соответствует любому количеству любых символов, но ?
делает его нежадным, поэтому он найдет как можно меньше этих символов, прежде чем найдет следующую часть регулярного выражения
(?=&|$)
- квадратные скобки делают это группой, а ?=
означает, что это предварительный просмотр, т.е. он не будет фактически добавлять совпадения в совпадение регулярного выражения, а просто проверяет их наличие. Он будет соответствовать либо другому &
, либо концу строки (обозначенному $
).
g
- это флаг, который сообщает регулярному выражению проверить всю строку, а не останавливаться после просто нахожу одно совпадение.