Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение (https://javascript.ru/forum/misc/7004-regulyarnoe-vyrazhenie.html)

jetli13 10.01.2010 18:15

Регулярное выражение
 
Помогите пожалуйста с регуляркой
есть текст:

<a title="словоВТайтле тырым-пырым." >словечко , просто слово</a> <span class="no-need">это слово не нужно</span>


в нем мне нужно найти "слов" только в
1) "слов"ечко
2) просто "слов"о

и все, остальные вхождения проигнорировать.

Спасибо!

Riim 10.01.2010 19:32

слов(?=ечко|о)

слов(?=(?:ечк)?о)

jetli13 10.01.2010 19:41

Цитата:

Сообщение от Riim
слов(?=ечко|о)

слов(?=(?:ечк)?о)

Спасибо, за ответ.
Понял что не правильно задал вопрос.

Нужно найти слова, которые не внутри title и вне span с классом no-need

jetli13 11.01.2010 09:33

Так и не решил проблему.
пробовал в онлайн редакторе подобрать.
Нахожу либо все вхождения, либо не одного (
Help please!!

PeaceCoder 11.01.2010 13:41

str='<a title="словоВТайтле тырым-пырым." >словечко , просто слово</a> <span class="no-need">это слово не нужно</span>';
re = /<(\w+?)(?:\s+(?!class=(['"])no-need\2)|(?:\w+=(['"]).*?[^\\]\3))*\s*>(.*?слов(?=ечко|о).*?)<\/\1>/ig;
alert(re.exec(str)[4]);
alert(re.exec(str)[4]);

PeaceCoder 11.01.2010 13:59

отладил. как видно второй результат null для span

получая [4] потом можно уже разбаить другой регуляркой

subzey 11.01.2010 16:53

Строго говоря, для разбора HTML регулярки подходят слабо. Если этот код прицплен к DOM, лучше бы использовать именно ДОМовские методы.

Riim 11.01.2010 17:22

Chrome: "Ошибка: Cannot read property '4' of null"

PeaceCoder 11.01.2010 17:26

Цитата:

Сообщение от Riim
Chrome: "Ошибка: Cannot read property '4' of null"

Я привел пример что работает. регулярка может выдавать null в этом случае подходящей строки вообще не найдено иначе найдет всю строку с условием поиска.

Michael83 11.01.2010 21:40

можно так
var str = '<a title="словоВТайтле \nтырым-пырым." >словечко , просто слово</a> <span class="no-need">это слово не нужно</span>';
str = str.replace(/(<\w+[^>]+?\b)(title="[^"]+")([^>]*?>)/, '$1$3');
str = str.replace(/<span[^>]+?class="(.*?)\bno-need\b(.*?)"[^>]*?>.*?(?=<\/span>)<\/span>/, '');
alert(str)
var re = /словечко|слово/gi;
var result = [];
while (m = re.exec(str))
    result.push(m[0]);
alert(result);


Часовой пояс GMT +3, время: 00:34.