JavaScript: понимание принципа [соответствия] - PullRequest
1 голос
/ 08 марта 2019

Новое в кодировании.Я не понимаю принцип [матча].Я имею в виду

    var wikipediaDontRedirectRegExp = new RegExp("^https?://([a-zA-Z0-9\\-_]+)\\.(?:m\\.)?wikipedia\\.(?:com|org)/wiki/(.*)(?:\\?oldformat=true|\\?previous=yes)", "i");
match = requestedURL.match(wikipediaDontRedirectRegExp);
if (match && match.length === 3) {
    lang = match[1];
    page = match[2];
    returnVal.redirectURL = 'http://' + getFullHostName() + '/' + lang + '/' + page;
    returnVal.domain = 'imgur';
    returnVal.autoRedirect = false;
    returnVal.lang = lang;
    return returnVal;
}

В этом коде я не понимаю, что относится к соответствию [1] или совпадению [2].Например, на

"^ https?: // ([a-zA-Z0-9 \ -_] +) \. (?: M \.)? Wikipedia \. (?: com | org) / wiki / (. *) (?: \? oldformat = true | \? previous = yes) "," i "

что такое совпадение [1], что такоесоответствует [2]?

Спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 08 марта 2019

В вашем случае у вас есть выражение,

^https?://([a-zA-Z0-9\\-_]+)\\.(?:m\\.)?wikipedia\\.(?:com|org)/wiki/(.*)(?:\\?oldformat=true|\\?previous=yes)

Выражение ищет группы типа ([a-zA-Z0-9 \ -_] +) или (. *) , у которого нет отмены, перед ним стоит знак кавычки, например (?: blabla) .

Соответствие - это результаты, которые вы получаете из регулярного выражения в вашем коде.Для каждого совпадения элементы, которые вы получаете в массиве от элемента 1 до размера элемента, являются этими группами.


Например, если мы пытаемся найти пары символов, которые имеют пробел между и'u' после пары мы используем код ниже.

Пример: Th e qu ick вернет ["e qu", "e", "q"].

var paragraph = 'The quick brown fox jumps over the lazy dog. It barked.';
var regex = /(\w) (\w)u/;
var found = paragraph.match(regex);

console.log(found);
// Would return Array ["e qu", "e", "q"]

In Array ["e qu", "e", "q"]

Первый элемент - это полное совпадение, а остальные найденные элементы [1] и найденные [2] - группы (скобки), которые я упомянул.

0 голосов
/ 08 марта 2019

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

Выражение: ^https?://([a-zA-Z0-9\\-_]+)\\.(?:m\\.)?wikipedia\\.(?:com|org)/wiki/(.*)(?:\\?oldformat=true|\\?previous=yes)

^ символ, по существу имеющий его, проверяет, является ли это новой строкой или началом ввода

http соответствие должно иметь это в нем

s? соответствие может дополнительно иметь "s" в этой части

:// совпадение должно содержать это

( начать создание группы для сохранения, чтобы позже ее можно было легко найти

[a-zA-Z0-9\\-_] совпадение с большинством букв, цифр и специальныхсимволы

+ предыдущая определенная группа должна содержать один или несколько символов

) маркер закрывающей группы

\\. экранирование, необходимое для включения символа . вmatch

(?: создать группу, но не сохранять эту группу для справки позже

m\\. match должно иметь "m".в нем

) маркер закрывающей группы

? предыдущая созданная группа является необязательной

wikipedia\\. совпадение должно иметь "википедию".в нем

(?: создать группу, но не сохранять эту группу для справки позже

com|org совпадать с "com" или "org", они взаимозаменяемы

) маркер закрывающейся группы

/wiki/ совпадение должно содержать "/ wiki /" в нем

( создать группу, которая будет сохранена для справки позже

. совпадение букв, цифр или специальных символов

* включает ноль или более символов для предыдущего маркера

) маркер закрывающей группы

(?: создатьгруппа, но не сохраняйте ее

\\? включают "?"в совпадении, что означает, что это будет проверять запросы, помещенные в URL

\\?oldformat=true|\\?previous=yes, проверять, прикреплены ли запросы "? oldformat = true" или "? previous = yes"

)маркер закрывающей группы

Я думаю, что это подводит итог.Если у вас есть еще вопросы по этому поводу, не стесняйтесь комментировать.Но суть в том, что match [1] собирается захватить группу ([a-zA-Z0-9\\-_]+), а match [2] собирается захватить группу (.*) после части каталога /wiki/.

0 голосов
/ 08 марта 2019

Соответствие относится к оператору второй строки: match = requestedURL.match(wikipediaDontRedirectRegExp);

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

Подробнее о .match() функцию можно найти здесь: https://www.w3schools.com/jsref/jsref_match.asp

...