2008-11-09 2 views
4
var pattern = /^0+$/; 

Мое предположение заключается в следующем:Как вы читаете это регулярное выражение JavaScript?

«Посмотрите как в начале и в конце строки, и если есть образец одного или более нулями в начале и в конце, а затем вернуть этот шаблон «.

Я уверен, что это не так, хотя, потому что, когда я бегу выражение с этой строкой:

var string = "0000009000000"; 

Он приходит null.

Так что это действительно говорит? И хотя я спрашиваю, что/как JavaScript рассматривает начало, середину и конец строки?

ОБНОВЛЕНИЕ # 1: Спасибо за ответы! Кажется, я понимаю это сейчас. Моя путаница возникла из-за того, что я визуализую строку как имеющую начало, середину и конец. Как это:

[начало] [средний] [конец]

Другими словами, для данной строки выше, следующие выражения работают, как я ожидаю их:

/^0+/; возвращает "000000" (узор из одного или нескольких нулей в начале строки)

и

/0+$/; возвращает «000000» (образец одного или несколько нулей в конце строки)

UPDATE # 2: я до-голосовавший все ответы на данный момент, потому что все они полезны, и я составил ответы в один большой один большой:

Учитывая следующий код JavaScript:

var string = "0000009000000"; 
var regExp = /^0+$/; 
alert(regExp.exec(string)); 

Он читает, в частности, как это:

«Если точный символ (ы) с последующим^модификатор и которому предшествует модификатор $ в регулярном выражении не ОБЯЗАТЕЛЬНО сидят в первой позиции (-ях) строки И последней позиции (-ей) строки (т. е. они не являются единственным символом в строке), а затем возвращают null. Else, верните символ (и). »

Другими словами, данная строка имеет шесть нулей« 000000 ». Это приводит к совпадению, потому что одна и та же группа символов« 0 »сидит в BOTH первые позиции (первого второй третий четвёртого пятый 6-я) и последние позиции (первый второй третий четвёртый пятый шестой) струны.

Однако в оригинале данной строки, есть шесть нулей, а затем девять, а затем шесть нулей («0000009000000»). Теперь шесть нулей в первых положениях строки (1, 2, 3, 4, 5, 6) НЕ являются точными шестью нулями, (8, 9, 10, 11, 12, 13). Следовательно,Возврат.

+1

Re: update 2. Путь overthinking. Выражение просто говорит: «соответствовать началу строки, за которой следуют 1 или более 0, а затем конец строки». Не думайте о^и $ как о местах, но в качестве помощников для (несуществующего) начального символа и терминатора. – billjamesdev 2008-11-11 00:54:17

+0

Может быть ... но задавая этот вопрос, я понял, что недостаточно просто знать определение - мне нужно «поддаться под капот» и узнать ПРИЧИН для определения - это алгоритм, который я хочу! :) – 2008-11-11 23:02:01

ответ

10

Это говорит, что ваша строка содержит только 0 ...он должен начинаться, затем иметь 1 или более 0, а затем заканчиваться.

7

^0 + $

  • положение Утверждай в начале строки «^»
  • Матч символа «0» в буквальном смысле «0+»
    • Между одним и неограниченное количество раз, (жадно) «+»
  • Позиция подтверждения в конце строки (или до разрыва строки в конце строки s) Тринг, если таковой имеется) «$»
2

Если вы хотите, чтобы соответствовать вашей строке, вы хотите, чтобы ваше регулярное выражение, чтобы быть что-то вроде:

var pattern = /^0+.*0+$/ 

Это будет соответствовать 1 или более «0 'в начале , 1 или больше 0 в конце и 0 или более от середины.

+0

Подумайте, что он хочет «начинается с 0s OR заканчивается 0s» ... вашему нужно 0 в начале и в конце. – billjamesdev 2008-11-09 05:19:19

2

Шаблон по меньшей мере одного , прикрепленного к и в начале (^) и конца ($) линии; другими словами, строка состоит из одного или нескольких нулей.

Чтобы соответствовать строка, состоящая из цифр от 0 до 9, а также начальные и конечные, по меньшей мере, один нуль, шаблон

/^0+[0-9]+0$/ 

будет работать, т.е. матч один или несколько нулей, то одна или более цифр 0 -9, заканчивающийся нулем.

Если не указано иное, JavaScript будет обрабатывать всю строку как одну строку, игнорируя символы новой строки; чтобы заставить его рассмотреть несколько отдельных строк, используйте модификатор m, например.

/regex/m 

Смотрите также:JavaScript regular expression overview on Mozilla Developer Center

1

В ответ на ваше обновление - вы вроде правильно. Строка, которую будет пытаться выполнить регулярное выражение, имеет начало, середину и конец.

Но знаешь что? Все строки имеют начало и конец.

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

Не думайте о своем 000000 как о начале, или о вашем 900000 как о конце. На самом деле, игнорируйте идею начала и конца на мгновение.

  • Это регулярное выражение соответствует «должна иметь некоторое количество нулей в ней где-то»: /0+/
  • Это регулярное выражение соответствует «должна иметь некоторое количество нулей в нем и ничего: /^0+$/

почему мы добавим the^и $?

Потому что для обозначения «и ничего больше нет», поэтому мы должны указать «начало строки, некоторые нули, конец строки», которая приходит к тому же.

Кстати, вы получили это тоже неправильно:

если есть образец одного или более нулями в начале и в конце, а затем вернуть этот шаблон

ваше регулярное выражение выиграл» t верните «этот шаблон», он вернется только true. Вам нужны скобки для того, чтобы завладеть рисунком: /^(0+)$/

0

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

Это:^0 + $

не будет звучать следующим образом: «Если с самого начала (^) моей строки, вы найдете по крайней мере один (+) ноль (0), и ничего другого до конца ($) строки. "

Помните, что регулярное выражение - это в основном куча утверждений «Если». Итак, во-первых, он должен быть «истинным», и ТОГДА он вернет наилучший результат. Регулярное выражение никогда не вернет «несколько истинный» или «в основном истинный» результат.

1

@CodeCurious, вы все еще делаете его более сложным, чем это должно быть. Регулярное выражение /^0+$/ просто означает, что вся строка состоит из одного или нескольких нулей. Регулярные предложения предлагают множество возможностей для путаницы, поэтому принимайте простоту везде, где вы можете ее найти.