Javascript - заменить все на регулярные выражения

1

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

Строка может иметь другие пробелы, но мне нужны только пробелы между paranthesis.

var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/\)\s\)/g, "))");
console.log(mystring);

Выход:

) ) ) ) ) )
)) )) ))

Но я хочу получить этот результат:

) ) ) ) ) )
))))))
Теги:

3 ответа

10
Лучший ответ

Проблема в том, что, потребляя ) ), у вас больше нет ведущего ) при просмотре следующей части строки.

Вместо того, чтобы заменять оба ), используйте положительное утверждение для замены только первого и пробелов после него, если за ними последует другое ):

mystring = mystring.replace(/\)\s(?=\))/g, ")");
//                  Lookahead ---^^^^^^     ^--- only one ) in replacement

Живой пример:

var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/\)\s(?=\))/g, ")");
console.log(mystring);
2

Как насчет 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);

Это позволит удалить все пробелы между ними ) )

  • 1
    Lookbehind, конечно, является совершенно новым в JavaScript и еще не в спецификации (это все еще предложение 3-го этапа ), поэтому нужно быть осторожным с тем, поддерживается ли оно в целевых браузерах. (Принимая во внимание, что предвидение было там с 3-го выпуска спецификации, 1999.) В этом случае нет необходимости смотреть назад.
1

Переместите последний ) на положительный взгляд и замените синглом ):

var mystring = ") ) ) ) ) )";
console.log(mystring);
mystring = mystring.replace(/\)\s+(?=\))/g, ")");
console.log(mystring); // => ))))))

См. Демо-версию regex.

Сведения о шаблоне

  • \) - а )
  • \s+ - пробелы 1+
  • (?=\)) - положительный взгляд, который требует a ) сразу справа от текущего местоположения (после 1+ пробелов).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню