Вместо использования ленивых квантификаторов, вы можете использовать отрицательный набор символов, так как они работают лучше, и вы можете использовать это регулярное выражение
(for\s*\([^:]+):([^)]+\))
и заменить его на
$1 in $2
Такжевам не нужно использовать .+\\s+
, так как это избыточно, и вместо этого вы можете просто написать .+?
, а еще лучше использовать отрицательный набор символов, чтобы он работал быстрее, и аналогично после :
вы можете написать \\s+.+
как.+?
но опять-таки отрицательный класс символов - лучший выбор, как я упоминал в своем ответе.
Еще один момент, который может привести вас к проблемам, заключается в том, что вы не должны использовать этот \$1in\$2
для замены, а вместо этого использовать $1 in $2
во-первых, вам не нужно экранировать $
как \$
, а во-вторых, потому что если ваш цикл for подобен этому, for(var x:list)
т.е. без пробела между двоеточием и окружающими переменными, то результат замены, который вы можете получить, будетfor(var xinlist)
, что сделало бы его недействительным.Вот почему я предложил выше в своем ответе заменить на $1 in $2
, чтобы in
имел пробел с обеих сторон.
Regex Demo
JS коды,
const s = `for(var x : list)
{
// something
}
for(var x : list) { for(var y : list) {
// something
}
}`
console.log(s.replace(/(for\s*\([^:]+):([^)]+\))/g, '$1 in $2'))