Как я могу удалить все экземпляры определенного значения, если оно не является частью цитируемого текста? - PullRequest
1 голос
/ 16 марта 2012

Используя регулярные выражения, я хочу удалить все экземпляры определенного значения, если только оно не является частью текста в кавычках, когда оно найдено.

Например, если я хочу удалить слово book, если он не найден в кавычках, и у меня есть следующий текст:

telephone book computer "i read a book" keyboard book

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

telephone computer "i read a book" keyboard

Возможно ли этос регулярным выражением JavaScript WebKit с использованием string.replace?

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Вы можете сделать это с помощью обратного вызова ( демо ):

result = str.replace(/\bbook\b\s*|("[^"]*")/g, function(m, quotes){ return quotes ? quotes: '' });

или с помощью трюка с предвкушением например ( demo ):

result = str.replace(/\bbook\b\s*(?=[^"]*(?:"[^"]*"[^"]*)*$)/g, '');

Последний работает только в том случае, если кавычки всегда закрыты, и может быть неэффективен для длинных строк.

0 голосов
/ 16 марта 2012

Выполните итерацию и создайте новую строку. Следите за тем, открывала или закрывала последняя найденная вами цитата. Не удаляйте книгу, если она стоит после вступительной цитаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...