2013-01-10 5 views
0

Я пытаюсь создать регулярное выражение для поиска, который будет смотреть на следующий код и возвращать только идентификаторы, а не классы:Matching слово, если предшествующий текст не "класс =»

1 id="contact" 
2 class="contact" 
3 #contact 
4 .contact 

Я хочу вернуть contact с 1-й и 3-й строк, а не 2-я и 4-я строки.

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

Возможно ли это?

+0

На каком основании вы отклоняете 4-й и выбираете 3-й? Это где-то связано с CSS? –

+0

Я ищу через множество файлов, ищущих только идентификаторы контактов, а не контактные классы, поэтому я просто хочу, чтобы они могли выбрать все из них и сразу же изменить их в CODA. Идентификаторы должны меняться из-за столкновения в шаблоне. –

ответ

0

Здесь вы идете:

/(?:#|id=")(\w+)"?/g 

строки, начинающиеся с любой # или id=" следуют символы слова. Возможно, вы захотите улучшить его, чтобы обрабатывать тире и подчеркивания, я бы сделал ставку.

В этом случае первая группа не захватывает, и текст ID будет вашей первой группой захвата $1.

UPDATE

это один:

(?:(?<=id=")|(?<=#))(contact) 

использует положительный 'назад, чтобы найти префиксы и соответствует только строка "контакт". Это НЕ будет работать в JavaScript (так что вы не можете проверить его в Интернете), но будет работать в текстовом редакторе или инструменте CLI, например ack.

+0

Спасибо за ответ! Я пытаюсь просто вернуть «контакт», но я все еще получаю «#contact» или «id =» контакт »с этим. Можно ли проверить их, но исключить их из результатов? –

+0

Или я не понимаю этого? Я попытался проверить его с помощью этой страницы: http://regexpal.com/?flags=g®ex=(%3F%3A%23%7Cid%3D%22)contact&input=id%3D%22contact%22%0Aclass%3D%22contact % 22% 0A% 23contact% 0A.contact - он выбирает правильные строки, но мне нужна только «контактная» часть. –

+0

Посмотрите мое обновление с lookbehinds. – Mathletics