Показать сообщение отдельно
  #20 (permalink)  
Старый 02.07.2011, 21:54
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Переопределяется метод toString для регэкспов, который вызывается, например, в случае /regexp1/ + /regexp2/, так, чтобы возвращать свое значение не в виде /regexp/flags (флаги в текущей версии не предусмотрены), а просто в виде regexp. Тогда конкатенация /regexp1/ + /regexp2/ даст regexp1regexp2, которая, будучи переданной аргументом RegExp, станет /regexp1regexp2/.

oldToString используется для получения строкового представления регэкспа. В value попадает как раз содержание регэкспа.

Но с учетом поправки, корректный код будет выглядеть так:
// OLD
var rx1 = RegExp(/regular/ + /expression/); 
var rx2 = /regularexpression/;
alert([rx1, rx2])
alert([rx1.test('regularexpression'), rx2.test('regularexpression')]) // false, true T_T

// NEW
RegExp.prototype.toString = function(){
    return this.source;
}

var rx1 = RegExp(/regular/ + /expression/); 
var rx2 = /regularexpression/;
alert([rx1, rx2])
alert([rx1.test('regularexpression'), rx2.test('regularexpression')]) // true, true! ^_^
Ответить с цитированием