Я хочу заменить некоторые пробелы между скобками регулярным выражением. Если я использую регулярное выражение, замените только некоторые пробелы (только уникальные пары).
Строка может иметь другие пробелы, но мне нужны только пробелы между paranthesis.
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/\)\s\)/g, "))");
console.log(mystring);
Выход:
) ) ) ) ) )
)) )) ))
Но я хочу получить этот результат:
) ) ) ) ) )
))))))
Проблема в том, что, потребляя ) )
, у вас больше нет ведущего )
при просмотре следующей части строки.
Вместо того, чтобы заменять оба )
, используйте положительное утверждение для замены только первого и пробелов после него, если за ними последует другое )
:
mystring = mystring.replace(/\)\s(?=\))/g, ")");
// Lookahead ---^^^^^^ ^--- only one ) in replacement
Живой пример:
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/\)\s(?=\))/g, ")");
console.log(mystring);
Как насчет lookbehind:
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/(?<=\))\s(?=\))/g, "");
console.log(mystring);
Демо-версия:
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/(?<=\))\s(?=\))/g, "");
console.log(mystring);
Это позволит удалить все пробелы между ними ) )
Переместите последний )
на положительный взгляд и замените синглом )
:
var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/\)\s+(?=\))/g, ")");
console.log(mystring); // => ))))))
Сведения о шаблоне
\)
- а )
\s+
- пробелы 1+(?=\))
- положительный взгляд, который требует a )
сразу справа от текущего местоположения (после 1+ пробелов).