Цитата:
Не подскажешь как правильно ответить на этот вопрос: Дан код: 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, время: 10:41. |