Пожалуйста, объясните некоторые регулярные выражения Javascript - PullRequest
0 голосов
/ 24 июня 2011

Я изучаю Javascript с помощью интерактивного учебного пособия, но нигде на этом веб-сайте или любом другом, на который я гуглил, не было объяснено ни одной путаницы символов, составляющих регулярное выражение.

Проверьте, все ли числа: / ^ [0-9] + $ /

Проверьте все ли буквы: / ^ [a-zA-Z] + $ /

И самый сложный:

Подтверждение адреса электронной почты: /^[\w-.+]+\@[a-zA-Z0-9.-]+.[a-zA-z0-9]]width2,4 } $ /

Что означают все косые черты, знаки доллара и скобки? Пожалуйста, объясните.

(Кстати, какие языки требуются для создания гибкого веб-сайта? Я немного знаю Javascript и хочу изучать jQuery и PHP. Что-нибудь еще нужно?)

Спасибо.

Ответы [ 5 ]

3 голосов
/ 24 июня 2011

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

Проверьте, все ли числа: ^ привязывают начало выражения (например, начало в начале текста). Без этого совпадение можно найти где угодно. [0-9] находит символы в этом классе символов (например, цифры 0-9). + после класса символов означает «один или несколько». Окончание $ привязывает конец текста (например, совпадение должно проходить до конца ввода). Поэтому, если вы сложите это вместе, это регулярное выражение будет содержать только 1 или более чисел в строке. Обратите внимание, что якоря важны, так как без них они могут соответствовать чему-то вроде "foo123bar".

Проверьте, все ли буквы: почти такие же, как и выше, но классы символов различны. В этом примере класс символов [a-zA-Z] представляет все строчные и прописные символы.

Последний на самом деле не сложнее, чем два других, он просто длиннее. Этот ответ становится довольно длинным, поэтому я просто объясню новые символы. \w в классе символов будет соответствовать символам слова (которые определены для реализации регулярного выражения, но обычно, по крайней мере, 0-9a-zA-Z_). Обратная косая черта перед @ экранирует @, поэтому она не рассматривается в качестве токена в регулярном выражении. Точка будет соответствовать любому символу, поэтому .+ будет соответствовать одному или нескольким символам (например, a, 1, Z, 1a и т. Д.). Последняя часть регулярного выражения ({2,4}) определяет интервальное выражение. Это означает, что он может соответствовать минимум 2 из предшествующего ему элемента и максимум 4.

Надеюсь, вы получили что-то из вышеперечисленного.

3 голосов
/ 24 июня 2011

Замечательное объяснение регулярных выражений на http://www.regular -expressions.info / , включая примечания по языку и особенностям реализации.

2 голосов
/ 24 июня 2011

Позвольте мне объяснить:

Проверьте, все ли числа: / ^ [0-9] + $ /

Итак, первое, что мы видим, это "/«в начале и в конце.Это разделитель, и он служит только для отображения начала и конца регулярного выражения.

Далее у нас есть «^», это означает начало строки.[0-9] означает число от 0-9.+ - это модификатор, который изменяет термин перед ним, в данном случае это означает, что вы можете иметь одно или несколько значений, то есть одно или несколько чисел от 0 до 9.

Наконец,мы заканчиваем символом «$», который противоположен «^» и означает конец строки.Так что сложите все это вместе, и это в основном гарантирует, что между началом и концом строки может быть любое количество цифр от 0 до 9.

Проверьте, все ли буквы: / ^ [a-zA-Z] + $ /

Мы заметили, что это очень похоже, но вместо проверки цифр 0-9 проверяются буквы az (строчные) и AZ (прописные).

И самое сложное:

Подтвердить адрес электронной почты: /^[\w-.+]+\@[a-zA-Z0-9.-]+.[a-zA-z0-9] {2,4} $ /

"\ w" означает, что это слово, в этом случае мы можем иметь любое количество букв или цифр, а также точкуозначает, что это может быть практически любой персонаж.

Новое здесь - это escape-символы.Многие символы не могут быть использованы без экранирования путем размещения косой черты впереди, как в случае с «\ @».Это означает, что он ищет непосредственно символ «@».

Теперь он ищет буквы и символы, точку (эта точка кажется неправильной, она также должна выходить за пределы периода, хотя все равно будет работать, так какбезэкранированный период сделает любой символ).Числа внутри {} означают, что между этими многими терминами в предыдущем термине существует промежуточное число, поэтому [a-zA-Z0-9] должно содержать 2-4 символа (эта часть здесь является доменом сайта, таким как .com, .ca или .info).Обратите внимание, что здесь есть еще одна ошибка: [a-zA-z0-9] должно быть [a-zA-Z0-9] (заглавная Z).

О, и проверьте этот сайт, указанный выше, это тоже отличный набор учебников.

1 голос
/ 24 июня 2011

Регулярные выражения - сложный зверь, и, как уже указывалось, в Google есть немало руководств, которые вы можете прочитать.

Чтобы ответить на вопросы ОП:

Проверьте, все ли числа: / ^ [0-9] + $ /

здесь все регулярные выражения заключены в //, очень похоже на строки, заключенные в кавычки '' или ''.

^ означает начало строки или строки (в зависимости от того, какие опции у вас есть при многострочном сопоставлении)

[...] называются классами символов.Все, что в [] - это список одинаковых совпадающих символов в этой позиции, в данном случае 0-9.Знак минус имеет особое значение «последовательность символов между».Так [0-9] означает «один из 0123456789».

+ означает «1 или более» предыдущего совпадения (в данном случае [0-9]), поэтому одно или несколько чисел

$ означает конец строки / строки.

Таким образом, в итоге найдите любую строку, которая содержит только чисел, то есть '0123a' не будет совпадать, так как [0-9]+ не соответствует ранее $).

Проверьте, все ли буквы: / ^ [a-zA-Z] + $ /

Надеемся, [A-Za-z] имеет смысл сейчас (A-Z= ABCDEF ... XYZ и a-z abcdef ... xyz)

Проверить адрес электронной почты: /^[\w-.+]+\@[a-zA-Z0-9.-] +. [a-zA-z0-9] {2,4} $ /

Не всем анализам регулярных выражений известна последовательность \w.Javascript, java и perl, которые я знаю, поддерживают это.

Я уже охватил '/^ в начале, для этого [] матча мы ищем \w - . и +.Я думаю, что регулярное выражение неверно.Либо знак минус должен быть экранирован с помощью \, либо он должен быть в конце [] (то есть [\w+.-]).Но это в стороне, они в основном пытаются разрешить что-либо из abcdefghijklmnopqrstuvwxyz01234567890 -. + , поэтому fred.smith-foo+wee@mymail.com будет совпадать, но fred.smith%foo+wee@mymail.com не будет (% не соответствует [\w.+-]).

\@ - это буквальный знак ациля (он экранируется при расширении perl @ ссылка на переменную массива)

[a-zA-Z0-9.-]+ совпадает с [\w.-]+.Очень похоже на пользовательскую часть матча, но не соответствует +.Таким образом, это соответствует foo.com. и google.co., но не my+foo.com или my***domain.co.

. означает совпадение с любым одним символом.Это опять-таки неверно, так как fred @ foo% com будет соответствовать как . соответствует %*^%$£! и т. Д. Это должно быть записано как \.

Последний класс символов [a-zA-z0-9]{2,4} ищет от 2 до 3 или4 из a-zA-Z0-9, указанного в классе символов (очень похоже на +, ищет "еще 1" {2,4} означает по крайней мере 2 с максимум 4 из предыдущего совпадения. Так что 'foo' соответствует, '11' соответствует, '11111' не соответствует и 'information' не соответствует.

Регулярное выражение "tweaked" должно быть:

/ ^ [\ w. + -] + \@ [A-Za-z0-9 .-] + \. [A-Za-z0-9] {2,4} $ /

0 голосов
/ 24 июня 2011

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

/^<something>$/ Строка начинается, есть что-то всреднее, а затем сразу заканчивается.

  • /^foo$/.test('foo'); // true
  • /^foo$/.test('fool'); // false
  • /^foo$/.test('afoo'); // false

+ Один или несколько объектов:

  • /a+/.test('cot'); // false
  • /a+/.test('cat'); // true
  • /a+/.test('caaaaaaaaaaaat');// true

[<something>] Включить любые символы, найденные в скобках.(включает диапазоны, такие как 0-9, az и AZ, а также специальные коды, такие как \ w для 0-9a-zA-Z _-

  • /^[0-9]+/.test('f00') // false
  • /^[0-9]+/.test('000') // true

{x,y} между X и Y вхождениями

  • /^[0-9]{1,2}$/.test('12'); // true
  • /^[0-9]{1,2}$/.test('1'); //true
  • /^[0-9]{1,2}$/.test('d'); // false
  • /^[0-9]{1,2}$/.test('124'); // false

Итак, это должно охватывать все, но для хорошей меры:

/^[\w-.+]+\@[a-zA-Z0-9.-]+.[a-zA-z0-9]{2,4}$/Начинается как минимум с символа \ w, -, + или ..За ним следует @, за которым следует не менее одного в наборе a-zA-Z0-9.-, за которым следует один символ что-нибудь (. означает что-нибудь, они означали \.), а затем 2-4 символа a-zA-z0-9

В качестве примечания, это регулярное выражение для проверки электронных писем не только датировано, но и очень, очень, очень некорректно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...