Использование регулярного выражения для преобразования разметки курсива в HTML
Я унаследовал сайт Wordpress с текстовой разметкой на несколько лет в подписях к изображениям. Вместо того, чтобы удалять их, я хотел бы использовать некоторые jQuery, чтобы превратить курсив, который был отмечен, следующим образом:
Hello this is some _italic text_ here.
к этому
Hello this is some <em>italic text</em> here.
Спасибо, вот что я попробовал, основываясь на ответах ниже.
<script type="text/javascript">
jQuery().ready(function() {
jQuery("p.wp-caption-text").each(function(n) {
this.innerHTML = this.innerHTML.replace(new RegExp("_([^{]*)_"), "<i>$1</i>");
});
});
</script>
Это работает, но в моей разметке иногда кажется, что он не находит второй символ _.
Вот пример из реальной жизни:
<p class="wp-caption-text">Left: Paul Klee, _Grosses Tier (Large Beast)_, 1928; fractional and promised gift of the Djerassi Art Trust. Right: Andrew Schoultz, _Three Caged Beasts_, 2011; Courtesy the artist and Marx & Zavattero; © Andrew Schoultz</p>
Для этого он производит это:
<p class="wp-caption-text">Left: Paul Klee, <i>Grosses Tier (Large Beast)_, 1928; fractional and promised gift of the Djerassi Art Trust. Right: Andrew Schoultz, _Three Caged Beasts</i>, 2011; Courtesy the artist and Marx & Zavattero; © Andrew Schoultz</p>
Любая идея, как регулярное выражение может быть изменено, чтобы это исправить?
2 ответа
Попробуй это:
var str = 'Hello this is some _italic text_ here.';
var str = str.replace(/_([^_]+)_/,"<em>$1</em>");
Если у вас есть много текста, который нужно сделать нецензурным шрифтом, вы должны использовать флаг "g" в вашем регулярном выражении, чтобы получить все совпадения.
<script type="text/javascript">
jQuery().ready(function() {
jQuery("p.wp-caption-text").each(function(n) {
this.innerHTML = this.innerHTML.replace(new RegExp("{link:([^}]*)}([^{]*){/link}"), "<a href=\"$1\">$2</a>");
this.innerHTML = this.innerHTML.replace(new RegExp("{i}([^{]*){/i}"), "<i>$1</i>");
});
});
</script>
Вы не заменяете [link...]...[/link]
но {link...}...{/link}
и с i
если ты хочешь [..]
вместо:
<script type="text/javascript">
jQuery().ready(function() {
jQuery("p.wp-caption-text").each(function(n) {
this.innerHTML = this.innerHTML.replace(new RegExp("\[link:([^\[]*)\]([^\[]*)\[/link\]"), "<a href=\"$1\">$2</a>");
this.innerHTML = this.innerHTML.replace(new RegExp("\[i\]([^\[]*)\[/i\]"), "<i>$1</i>");
});
});
</script>
Может быть, есть опечатка
Сожалею.!
Для моего НЕ читающего вопроса отношение:)
Смотрите другой. Работает
И что было с использованием g
:
var str = 'Hello this is some _italic text_ here.';
var str = str.replace(/_([^_]+)_/g,"<em>$1</em>");