Использование регулярного выражения для преобразования разметки курсива в HTML - PullRequest
0 голосов
/ 12 октября 2011

Я унаследовал сайт 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 &amp; 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 &amp; Zavattero; © Andrew Schoultz</p>

Есть идеи, как можно изменить регулярное выражение, чтобы это исправить?

Ответы [ 2 ]

0 голосов
/ 12 октября 2011
<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>");
0 голосов
/ 12 октября 2011

Попробуйте это:

var str  = 'Hello this is some _italic text_ here.'; 
var str = str.replace(/_([^_]+)_/,"<em>$1</em>");

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

...