2011-10-11 3 views
0

Я унаследовал сайт Wordpress с разметкой Textile в течение нескольких лет в подписях изображений. Вместо того, чтобы зачистки их я хотел бы использовать некоторые JQuery, чтобы включить курсив, которые были отмечены выше, как это:Использование регулярного выражения для преобразования текстовой курсивной разметки в HTML

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> 

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

+0

Ваше регулярное выражение '_ ([^ {] *) _' 'заменяет _ [ничего, кроме {] _' это не работает, попробуйте: '_ ([^ _] *) _' Теперь он заменяет '_ [ничего, кроме _] _' – andlrc

ответ

0

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

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

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

+0

Это * почти * работает так, как я хочу. Но он сталкивается с проблемами, когда строка имеет несколько случаев «_», например: _this_ и _that_ должны быть курсивом. Он будет делать это «this_» и «it» в курсивом, а не «это» и «это». – REJH

0
<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>");