Простая задача регулярного выражения: замена слов на '?' - PullRequest
0 голосов
/ 03 июня 2009

Хорошо, вот моя текущая функция тестирования:

function make_void( str )
{
    var str_arr = str.split( /[\W]+/ );
    var voidstr;
    var newstr = "";

    for ( var i = 0; i < str_arr.length; i++ )
    {
        voidstr = str_arr[i];
        // if ( Math.random() <= 0.9 )
        // {
            voidstr = voidstr.replace( /\w/gi, "?" );
        // }

        newstr += voidstr + " ";
    }

    document.writeln( newstr );
}

Проблема? Пунктуация потеряна.

Какой хороший способ пересмотреть это так, чтобы они не были?

Ответы [ 2 ]

3 голосов
/ 03 июня 2009

Разделите пробел (\s), а не на слове (\W), и вы сохраните пунктуацию.

function make_void( str )
{
        var str_arr = str.split( /\s+/ ); //  !!!THIS LINE CHANGED!!!
        var voidstr;
        var newstr = "";

        for ( var i = 0; i < str_arr.length; i++ )
        {
                voidstr = str_arr[i];
                // if ( Math.random() <= 0.9 )
                // {
                        voidstr = voidstr.replace( /\w/gi, "?" );
                // }

                newstr += voidstr + " ";
        }

        document.writeln( newstr );
}


обновление: пример фрагмента с использованием метода Array.join ():

for ( var i = 0; i < str_arr.length; i++ )
{
    // if ( Math.random() <= 0.9 )
    // {
        str_arr[i] = str_arr[i].replace( /\w/gi, "?" );
    // }
}

var newstr = str_arr.join(' ');
1 голос
/ 03 июня 2009

Может помочь пример текста, с которым вы пытаетесь сопоставить. (Что вы на самом деле хотите сохранить ?)

На данный момент может помочь следующее регулярное выражение:

[\w\d,.?:;"'-()]

Это соответствует словам, цифрам и количеству знаков препинания (хотя и не всем).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...