2009-06-06 2 views
9

У меня есть строка в JavaScript и она содержит тег a с href. Я хочу удалить все ссылки и текст. Я знаю, как просто удалить ссылку и оставить внутренний текст, но я хочу полностью удалить ссылку.Regex в Javascript для удаления ссылок

Например:

var s = "check this out <a href='http://www.google.com'>Click me</a>. cool, huh?"; 

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

s = "check this out. cool, huh?"; 
+0

Другой вопрос относится только к DOM (например, браузер, jsdom), в то время как этот вопрос вообще JavaScript. – mikemaccana

+0

@mikemaccana +1. Этот вопрос касается манипуляции с строкой, а не манипуляций с DOM. Голосование, чтобы разблокировать дубликат. –

+0

Если быть точным, не останетесь ли вы «проверить это, круто, а?», Если вы вычеркиваете 'a'? – Jeroen

ответ

13

Это раздеть все между <a и /a>:

mystr = "check this out <a href='http://www.google.com'>Click me</a>. cool, huh?"; 
alert(mystr.replace(/<a\b[^>]*>(.*?)<\/a>/i,"")); 

Это не совсем несложное, но, возможно, это будет делать трюк для вашей цели ...

+2

мое предложение:/] *)?>. *?<\/a>/ig – Christoph

3

Регулярные выражения принципиально плохо разбора HTML (см Can you provide some examples of why it is hard to parse XML and HTML with a regex?, почему). Вам нужен парсер HTML. См. Can you provide an example of parsing HTML with your favorite parser? для примеров с использованием различных парсеров.

+0

Дубликат http://www.google.com/search?q=site:stackoverflow.com+%22Regexes+are+fundamentally+bad+at+parsing+HTML%22;) – Gumbo

+0

Это начинает звучать как клише. Иногда вам не нужно разбирать HTML в какой-либо структуре данных, вам просто нужно как-то манипулировать этой строкой. Бывают случаи, когда RegExp имеет смысл. Правильный инструмент для правильной работы. И, кстати, Джон Ресиг написал HTML-парсер в JavaScript, и он использовал там какой-то RegExp. http://ejohn.org/blog/pure-javascript-html-parser/ –

+0

@ Ionut G. Stan Вам всегда нужно анализировать HTML в структуре данных, потому что это единственный способ надежно работать с ним. Регулярные выражения являются частью анализа, но эти вопросы всегда хотят использовать одно регулярное выражение для поиска или замены чего-либо. Это невозможно с традиционными регулярными выражениями (как показывает одна из ссылок в ответе), и очень сложно получить правильное решение с теми, где это возможно (например, реализация Perl, которая добавляет рекурсию). Существует много доступных библиотек, которые уже выполняют задачу работы с HTML для вас. Вы должны использовать их, а не регулярное выражение, которое, как гарантируется, потерпит неудачу. –

0

Если вы хотите, чтобы удалить <a> элементы, следующие должны хорошо работать:

s.replace(/<a [^>]+>[^<]*<\/a>/, ''); 

Это должно работать для примера вы дали, но он не будет работать для вложенных тегов, например, это Wouldn» т работа с этим HTML:

<a href="http://www.google.com"><em>Google</em></a> 
9

Чтобы уточнить, чтобы стричь метки ссылок и оставить все между ними нетронутыми, это двухэтапный процесс - удалить открывающий тег, а затем удалить закрывающий тег.

txt.replace(/<a\b[^>]*>/i,"").replace(/<\/a>/i, ""); 

Работа образца:

<script> 
function stripLink(txt) { 
    return txt.replace(/<a\b[^>]*>/i,"").replace(/<\/a>/i, ""); 
} 
</script> 

<p id="strip"> 
<a href="#"> 
    <em>Here's the text!</em> 
</a> 
</p> 

<p> 
<input value="Strip" type="button" onclick="alert(stripLink(document.getElementById('strip').innerHTML))"> 
</p> 
+0

@ Согласитесь, вы правы, я допустил ошибку. Сожалею. – mikemaccana

Смежные вопросы