2014-02-13 3 views
0

Поэтому я хотел бы использовать javascript для замены всех слов вне HTML-тегов в тексте. Проверьте приведенное ниже объяснение.Regex, чтобы соответствовать всем за пределами шаблона регулярного выражения

Я хотел бы преобразовать это:

<tag with-attr="something"></tag><tag>Text to match</tag><tag>Text to Match</tag> 

... к этому:

<tag with-attr="something"></tag><tag>Manipulated Text</tag><tag>Manipulated Text</tag> 

Теперь у меня есть регулярное выражение, которое может соответствовать все теги и содержащий его текст:

\<[^>]*\> 

Но я не знаю, как invert выражение, так сказать.

EDIT
Кроме того, я ищу использовать функции в replace/match, не split, так как я хочу, чтобы сохранить информацию о тегах и выплюнуть рабочую страницу обратно с новой информацией.

+1

использовать split() вместо соответствия(). – dandavis

+0

вы запрашиваете: '\> [^ <] * \ <'? (switch> и <) – BMW

+0

@dandavis Я не хочу терять теги, потому что я делаю замену всей веб-страницы, поэтому мне нужна информация о тегах после этого. Я хочу использовать функцию replace. –

ответ

1

с использованием PAREN, в том числе разделение() RegExp и дополнительные методы массива делают "обработки потока" довольно прост:

'<tag with-attr="something"></tag><tag>Text to match</tag>Text to Match<tag>' 
    .split(/(<[^>]+>)/).map(function(x,i){ 
    if(!(i%2) && x){ x= escape(x); } 
    return x; 
}).join(""); 

пример вывода:

"<tag with-attr="something"></tag><tag>Text%20to%20match</tag>Text%20to%20Match<tag>" 

побег() является просто показать что textContent действительно был изменен ... Я только ручаюсь за ввод близко к вашему примеру. вложенности или недействительный HTML может обмануть любого RegExp, но я уверен, что кто-то принесет, что до ...

+0

Ничего себе, очень интересно, я попробую это сейчас. –

+0

Большое вам спасибо, я думаю, что искал не то место для моего решения. Сегодня узнал что-то новое :) –

+0

np. Я знаю, что использование split немного странно, но js иногда немного странно ... – dandavis

0

Что-то вроде этого

/>([^<>]*\w)</ 

демо здесь: http://rubular.com/r/2QPLjOeMAu

Теперь вам просто нужно чтобы заменить содержимое следующим образом:

var str = '<tag with-attr="something"></tag><tag>Text to match</tag><tag>Text to Match</tag>'; 
var res = str.replace(/>([^<>]*\w)</g, '>Manipulated text<'); 
console.log(res); 
Смежные вопросы