Использование регулярного выражения для преобразования курсивной разметки текстиля в HTML

#jquery #regex #wordpress #textile

#jquery #регулярное выражение #wordpress #текстиль

Вопрос:

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

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

Комментарии:

1. Ваше регулярное _([^{]*)_ выражение заменяет _[anything but {]_ это не работает попробуйте: _([^_]*)_ теперь оно заменяет _[anything but _ ]_

Ответ №1:

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

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

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

Комментарии:

1. Это почти работает так, как я хочу. Но это приводит к проблемам, когда строка имеет несколько вхождений » , например: _this и это должно быть курсивом». Он будет делать курсивом «это_ и _ то», а не «это» и «то».

Ответ №2:

 <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] but {link...}...{/link} и with 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>");