Есть ли в JavaScript эквивалент preg_replace_callback из PHP?

29 окт. 2010 г., 04:57:16
Просмотры: 671
Голосов: 3

У меня есть PHP-функция, которая выполняется внутри add_meta_box() в редакторе контента WP (см. ниже), и я хочу преобразовать её в JavaScript, чтобы она выполнялась по клику кнопки (по запросу, а не автоматически при загрузке) и преобразовывала содержимое поста в реальном времени (без отправки на сервер).

Есть ли эквивалентный метод в JavaScript?

add_meta_box('mycontentfilter', __('Мой фильтр контента'), 'my_content_filter', 'post', 'side', 'high');

function my_content_filter()
{
    global $post;
    $mykeyword = 'найди эту фразу';
    $post->post_content = preg_replace_callback("/\b($mykeyword)\b/","doReplace", $post->post_content);
}


// callback-функция
function doReplace($matches)
{
    static $count = 0;
    switch($count++) 
    {
        case 0: return '<b>'.$matches[1].'</b>';   // 1-е вхождение - обернуть в жирный
        case 1: return '<em>'.$matches[1].'</em>'; // 2-е вхождение - обернуть в курсив
        case 2: return '<u>'.$matches[1].'</u>'; // 3-е вхождение - подчеркнуть
        default: return $matches[1];              // остальные не изменять
    }
}
1
Комментарии

Ничего личного, но я проголосовал за закрытие, потому что это действительно связано с Javascript в целом, а не с WordPress. На Stack Overflow есть много вопросов по этой теме. Если вы не согласны, присоединяйтесь к обсуждению на Meta!

Jan Fabry Jan Fabry
29 окт. 2010 г. 15:07:28
Все ответы на вопрос 1
1

Привет, @Scott B:

Это скорее вопрос для StackOverflow, чем для WordPress Answers. Я попробую помочь, но если это не то, что вам нужно, я бы рекомендовал удалить ваш вопрос здесь и задать его на SO.

Функция Replace() в JavaScript может принимать функцию в качестве аргумента. Бен Нейдел (который, по моему мнению, настоящая рок-звезда в jQuery/JavaScript) написал отличную статью о том, как использовать Replace() с callback-функцией (ищите подзаголовок "Javascript String Replace() - Function Replace"):

29 окт. 2010 г. 13:48:56
Комментарии

Пример: "how now, brown cow".replace(/(o)(.)/g, function(match, first, next){ return first + next.toUpperCase(); }); // возвращает "hoW noW, broWn coW"

User User
29 окт. 2010 г. 16:10:25