Цитата:
Не подскажешь как правильно ответить на этот вопрос: Дан код: var rx1 = RegExp(/regular/ + /expression/); var rx2 = /regularexpression/; Что нужно добавить в начало программы, чтобы rx1 и rx2 стали идентичными? Сами строчки трогать нельзя. |
Цитата:
Вот этот пример я до сих пор не знаю как правильно сделать))) Это же для Яндекс бар, возможно там что-то из EcmaScript 5, вроде use strict. |
Цитата:
|
Скажем, это:
// OLD var rx1 = RegExp(/regular/ + /expression/); var rx2 = /regularexpression/; alert([rx1, rx2]) alert([rx1.test('regularexpression'), rx2.test('regularexpression')]) // false, true T_T // NEW var oldToString = RegExp.prototype.toString; RegExp.prototype.toString = function(){ var value = oldToString.call(this); return value.replace(/\//g, '') } var rx1 = RegExp(/regular/ + /expression/); var rx2 = /regularexpression/; alert([rx1, rx2]) alert([rx1.test('regularexpression'), rx2.test('regularexpression')]) // true, true! ^_^ |
Я просто привел пример, что спрашивают.
Т.е. все, что есть в примерах вакансий со страницы http://company.yandex.ru/job/vacancies/ Да особо и раскрывать то нечего. Думаю, чтобы пройти собеседование, надо прочитать книги http://oreilly.com/catalog/9780596805531 http://oreilly.com/catalog/9780596806767 И всё. Знаний будет достаточно. |
|
B@rmaley.e><e, у регекспов есть замечательное свойство source
|
tenshi, спасибо, забыл о существовании такового. Лучше, конечно, использовать его, чем костыль с toString.
|
Цитата:
value?? |
Переопределяется метод 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! ^_^ |
Часовой пояс GMT +3, время: 17:20. |