eval () при замене строки |JavaScript - PullRequest
1 голос
/ 31 декабря 2010

Возможно ли, что массив замен строк с использованием регулярных выражений может использовать eval для выполнения и возврата значения из функции, которую мне нужно сделать с помощью этого метода:

var message = $('#message').html();

var searchstring = [
    /<span style="color: rgb((.*), (.*), (.*));">(.*)<\/span>/gi,
    // other regex
];

var replacestring = [
    eval('RGBtoHex($1, $2, $3)'),
    // other regex
];

for(i = 0; i < searchstring.length; i++)
{
    message = message.replace(searchstring[i], replacestring[i]);
}

$('.message-box').val(message);

Я пытаюсь преобразовать RGB в шестнадцатеричное значение, поэтому оно должно измениться на что-то вроде: rgb(255, 255, 255) на #FFFFFF. Тем не менее, когда я делаю это, он говорит в Firebug: $1 is not defined, который расположен для этого: eval('RGBtoHex($1, $2, $3)'),.

Как я смогу выполнить функцию eval() для возврата rgb в шестнадцатеричное значение при выполнении замены строки на .replace()?

Все отлично работает, кроме eval-части.

Ответы [ 2 ]

6 голосов
/ 31 декабря 2010

Это не работает так.
Когда вы вызываете eval, вы eval набираете необработанную строку 'RGBtoHex($1, $2, $3)'.

Вам необходимо передать функцию вreplace:

message.replace(
    /rgb\((\d+), (\d+), (\d+)\)/gi, 
    function(str, r, g, b) { return RGBtoHEX(r, g, b); }
);
0 голосов
/ 31 декабря 2010

Ваш eval выполняется при создании массива замены.Конечно, вы можете вызвать код во время замены, просто передав функцию, принимающую параметр вместо строки замены ... например,

"1234".replace(/\d/g,function(x){return parseInt(x)+1})

возвращает "2345" как результат

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