2013-03-28 3 views
0

У меня есть отображение данных на моем веб-сайте из XML-канала. К сожалению в XML-фиде владелец использовал серьезные акценты: `вместо апострофии: 'Заменить все символы в p-тегах с помощью замены javascript

Я использую следующий javascript, чтобы попытаться заменить серьезные акценты апострофами, но он работает только для первого серьезного акцента в содержании. Как настроить код, чтобы он повлиял на все серьезные акценты внутри тегов p.

<script type="text/javascript"> 
    $("p").each(function() { 
    var text = $(this).text(); 
    text = text.replace("`", "'"); 
    $(this).text(text); 
    }); 
    </script> 

ответ

5

Используйте регулярное выражение с «глобальным» (g) флагом:

text = text.replace(/`/g, "'"); 

При использовании строки для первого аргумента, только первый матч заменен (как вы обнаружили). С флагом g все совпадения заменяются. (Очевидно, будьте осторожны, если вы используете какие-либо символы, которые являются особыми в регулярных выражениях, не забудьте их избежать. Например, если вы хотите заменить все символы [, вам нужно будет \ до [, чтобы избежать его она имеет особое значение в регулярном выражении)

Ricardo's note Смотрите также об использовании способности передать функцию text непосредственно, вместо использования each, например:.

<script type="text/javascript"> 
    $("p").text(function(index, text) { 
     return text.replace(/`/g, "'"); 
    }); 
</script> 
+0

Do не нужно бежать 'характер? –

+0

@donderpiet: Нет, это не является особым в регулярных выражениях. '' тестирование '' '" .replace (/ '/ g," '")' приводит к '' testin' '' '', например. –

+1

Фантастическое спасибо, я застрял на этом в течение 3 часов !!! –

1

Вам не нужно each

$('p').text(function(i, text) { 
    return text.replace(/\`/g, "'"); 
}); 
+1

+1 для указателя на 'text'. Может также хотеть упомянуть вещь регулярного выражения (которую вы использовали, но не упомянули). –

0

Вы должны использовать регулярное выражение - что-то вроде:

text = text.replace(/`/gi, "'"); 

Regular заменить только заменяет первый экземпляр.

0

Вы должны использовать жадный регулярное выражение:

text = text.replace(/`/g, "'"); 
+1

Глобальный, а не жадный. –

+0

@ T.J.Crowder Ваша лексика жадна! :) – Ian

+0

@Ian: LOL! .... –

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