Подтвердить что ты не робот

Что делает RegExp.

Я столкнулся с фрагментом кода в JScript:

RegExp.$1

Кто-нибудь знает, что он делает?

Если я вывожу его сам по себе, я не получаю ничего, даже ошибки.

Я не могу найти ссылку на него http://www.w3schools.com/jsref/jsref_obj_regexp.asp

Был найден регулярный поиск непосредственно перед этим фрагментом кода, который, как я подозреваю, имеет к нему какое-то отношение:

.search(/^__product\[(.+)\]$/)
4b9b3361

Ответ 1

Литеральное выражение RegExp.$1 даст вам значение первой группы захвата последнего регулярного выражения. Каким бы ни было это регулярное выражение.

Например:

var match = /_(.*)_/.exec('_test_');

var newMatch = '123-abc'.match(/(\d*)-(\w*)/);
var num = RegExp.$1; // '123';

RegExp.$1 доступен по всему миру, поэтому к нему можно получить доступ из любой точки вашей страницы, независимо от того, где выполнялось само регулярное выражение.

Я никогда не видел этот синтаксис, используемый перед тем, как увидеть этот вопрос, и я бы не предложил его использовать, поскольку я не могу найти документацию на нем. Кроме того, любое регулярное выражение запускается на вашей странице, вне зависимости от того, где будет изменено это свойство. Если вы хотите получить группы захвата, я бы использовал массивы, возвращенные из String.match или RegExp.exec.

EDIT: Я нашел документацию об этом: http://msdn.microsoft.com/en-us/library/ie/24th3sah(v=vs.94).aspx

EDIT 2: я нашел дополнительную информацию об этом: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#RegExp_Properties

RegExp.$1 устарел. Это означает, что будущие браузеры могут удалить эту "функцию", поэтому я предлагаю не использовать ее.

Ответ 2

$1 вернет первую группу, которая соответствует регулярному выражению.

В вашем примере значение, хранящееся в $1, соответствует всем .+

Группа обозначается скобками, и вы можете иметь кратность. Каждая сохраненная группа будет просто увеличивать цифру с помощью $, т.е. $1, $2, $3...

Пример:

Если ваш вход был __product[Version 12 Coupe], то $1 будет содержать Version 12 Coupe

Ответ 3

Они работают вместе с захватами круглых скобок. Например, /(foo)/ соответствует и запоминает "foo" в "foo bar". Соответствующая подстрока может быть вызвана из результирующих элементов массива [1],..., [n] или из предопределенных свойств объекта RegExp $1,..., $9.

В вашем примере $1 ссылается на соответствие, сделанное (.+)

См. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

Ответ 4

$1 - это то, что соответствует первому захвату. Если у вас больше захватов, вы можете использовать $2, $3 и т.д.

Пример:

"abc".replace(/(.)/, "$1$1"); // aabc
"abc".replace(/(.{2})/, "$1$1"); // ababc
"abc".replace(/(.)(.)/, "$2$1"); // bac

Ответ 5

Как уже говорилось ранее, эти конструкции называются захватами групп скобок, и они в основном используются для ссылки на совпадения, сохраненные/сохраненные после успешного выполнения связанной с RegExp операции.

Кроме того, как было сказано ранее, я не советую использовать их в вашем коде, если не будет обеспечена хорошо контролируемая среда/контекст, например, тот, который предоставляется встроенным методом replace(), найденным на объекте String.prototype.

Ответ 6

Чтобы добавить некоторые детали:

(Как уже говорилось,) RegExp.$n -property (где n - это одна цифра 1-9) возвращает последнюю подстроку n th в скобках (захваченных) в совпадении,

Эти свойства были впервые реализованы в JavaScript 1.2 и устарели в JavaScript 1.5 - когда RegExp претерпело существенное изменение, и многие результаты из RegExp.prototype.exec(string) были перенесены из объекта RegExp в экземпляр RegExp и все свойства .$ (и их версии с полным именем (кроме .multiline)) "ушли".


нестандартный 1$1, $2, $3, $4, $5, $6, $7, $8, $9 свойства статические и только для чтения свойства регулярных выражений (которые содержат совпадающие подстроки в скобках) и изменяются при каждом успешном совпадении.

Они не являются свойствами отдельного объекта регулярного выражения. Вместо этого вы всегда используете их как RegExp.$1,..., RegExp.$9.

Количество возможных подстрок в скобках неограниченно (конечно), но объект RegExp может содержать только последние девять.

1 Нестандартно = не является частью любой текущей спецификации!


Вы можете найти определение и ссылки в следующих разделах ECMA-262 3 Характеристики:

  • 15.5.4.10 - String.prototype.match(regexp)
  • 15.5.4.11 - String.prototype.replace(regexp)
  • 15.10.2.1 - Обозначение объекта RegExp NCapturingParens
  • 15.10.6.2 - RegExp.prototype.exec(string)