var pattern = /^0+$/;
Мое предположение - это:
"Смотрите и в начале и в конце строки, и если существует шаблон одного или нескольких нулей вначале и конца, то возвратите тот шаблон".
Я уверен, что это неправильно, тем не менее, потому что, когда я выполняю выражение с этой строкой:
var string = "0000009000000";
Это подходит null
.
Таким образом, что это действительно говорит? И в то время как я спрашиваю, что/как JavaScript рассматривает началом, серединой и концом строки?
ОБНОВЛЕНИЕ № 1: Спасибо за ответы! Я думаю, что понимаю это теперь. Мой беспорядок произошел от того, что я визуализирую строку как наличие начала, середины и конца. Как это:
[начало] [середины] [конец]
Другими словами, для данной строки выше, следующие выражения работают, поскольку я ожидаю их к:
/^0+/;
возвраты "000000" (шаблон одного или нескольких нулей в начале строки)
и
/0+$/
; возвраты "000000" (шаблон одного или нескольких нулей в конце строки)
ОБНОВЛЕНИЕ № 2: Я проголосовавший все ответы на эту точку, потому что они все полезны, и я скомпилировал ответы в один большой большой:
Учитывая следующий код JavaScript:
var string = "0000009000000";
var regExp = /^0+$/;
alert(regExp.exec(string));
Это читает, частично, как это:
"Если точный символ (символы), сопровождаемый ^ модификатором и, предшествовал модификатором $ в регулярном выражении, ОДНОВРЕМЕННО не находятся в первом положении (положениях) строки И последней позиции (позициях) строки (т.е. они не единственный символ (символы) в строке), затем возвратитесь null
. Еще, возвратите символ (символы)."
Другими словами, скажем, данная строка является шестью нулями "000000". Это приводит к соответствию, потому что та же самая группа "0" символы сидит в ОБОИХ первые положения (1-й 2-й 3-й 4-й 5-й 6-й) И последние позиции (1-й 2-й 3-й 4-й 5-й 6-й) строки.
Однако в исходной данной строке, существует шесть нулей, сопровождаемых девятью, сопровождаемыми шестью нулями ("0000009000000"). Теперь, эти шесть нулей в первых положениях строки (1-й, 2-й, 3-й, 4-й, 5-й, 6-й) НЕ являются теми же самыми шестью нулями, находящимися в последних позициях строки (8-й, 9-й, 10-й, 11-й, 12-й, 13-й). Следовательно, a null
возвращается.
Это говорит, что Ваша строка содержит только 0... это должно начать, затем иметь 1 или более 0, затем закончиться.
$ ^0+
Если Вы хотите, чтобы это соответствовало Вашей строке, Вы хотите, чтобы Ваш regexp был чем-то как:
var pattern = /^0+.*0+$/
Это будет соответствовать 1 или более '0 вначале, 1 или более '0 в конце и 0 или больше из чего-либо в середине.
Шаблон по крайней мере одного 0, привязанный на обоих начало (^) и конец ($) строки; другими словами, строка состоит из одного или нескольких, обнуляет.
Соответствовать строке, состоящей из цифр от 0 до 9, и запускающейся и заканчивающейся по крайней мере одним нулем, шаблоном
/^0+[0-9]+0$/
работал бы, т.е. соответствовал бы, один или несколько обнуляет, затем одна или несколько цифр 0-9, заканчивающихся в нуле.
Если иначе не проинструктировано, JavaScript будет рассматривать всю строку как одну строку, игнорируя символы новой строки; чтобы вынудить это рассмотреть несколько отдельных строк, используйте m модификатор, например.
/regex/m
См. также: Обзор регулярного выражения JavaScript Центра разработки Mozilla
При ответе на обновление - Вы - вид права. Строка, которой regex попытается соответствовать, действительно имеет начало, середину и конец.
Но Вы знаете что? Все строки имеют начало и конец.
Ваш regex говорит, строка должна иметь начало, конец, и промежуточный эти два, только строка нулей.
Не думайте о Вашем 000000
как являющийся в запуске или Вашем 900000
как являющийся в конце. На самом деле проигнорируйте идею начать и конец на мгновение.
/0+/
/^0+$/
почему мы добавляем ^ и $?
Поскольку нет никакой regex нотации для "и ничто иное", таким образом, мы должны указать, "запускаются строки, некоторых нулей, конца строки", которая приходит к тому же самому.
Между прочим, Вы поняли это превратно также:
если существует шаблон одного или нескольких нулей вначале и конца, то возвратите тот шаблон
Ваш regex не возвратится, "который шаблон", он только возвратит true
. Вам нужны скобки для овладения шаблоном: /^(0+)$/
@CodeCurious, Вы все еще делаете это более сложным, чем это должно быть. regex /^0+$/
просто означает, что вся строка состоит из одного или нескольких нулей. Regexes предлагают много возможностей для беспорядка, поэтому принимают простоту везде, где можно найти его.
Я всегда помещал своего Regex в человеческие слова, чтобы удостовериться, что это - то, что я имел в виду.
Это: $ ^0+
Читал бы следующим образом: "Если от запуска (^) моей строки, Вы находите по крайней мере один (+) нуль (0) и ничто иное до конца ($) строки".
Помните, regex является в основном набором операторов "If". Таким образом, сначала это должно быть "верно", и ЗАТЕМ это возвратит самый лучший результат. Regex никогда не будет возвращать "несколько истинное", или "главным образом истинный" результат.