Как Вы читаете это регулярное выражение JavaScript?

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 возвращается.

5
задан Wiktor Stribiżew 8 October 2019 в 23:38
поделиться

8 ответов

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

10
ответ дан 18 December 2019 в 06:52
поделиться

$ ^0+

  • Утверждайте положение в начале строки «^\»
  • Соответствуйте символу “0” буквально «0 +»
    • Между одним и неограниченными временами, максимально много раз, отдавая по мере необходимости (жадный) «+»
  • Утверждайте положение в конце строки (или перед разрывом строки в конце строки, если таковые имеются) «$»
7
ответ дан 18 December 2019 в 06:52
поделиться

Если Вы хотите, чтобы это соответствовало Вашей строке, Вы хотите, чтобы Ваш regexp был чем-то как:

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

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

2
ответ дан 18 December 2019 в 06:52
поделиться

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

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

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

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

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

/regex/m

См. также: Обзор регулярного выражения JavaScript Центра разработки Mozilla

2
ответ дан 18 December 2019 в 06:52
поделиться

При ответе на обновление - Вы - вид права. Строка, которой regex попытается соответствовать, действительно имеет начало, середину и конец.

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

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

Не думайте о Вашем 000000 как являющийся в запуске или Вашем 900000 как являющийся в конце. На самом деле проигнорируйте идею начать и конец на мгновение.

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

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

Поскольку нет никакой regex нотации для "и ничто иное", таким образом, мы должны указать, "запускаются строки, некоторых нулей, конца строки", которая приходит к тому же самому.

Между прочим, Вы поняли это превратно также:

если существует шаблон одного или нескольких нулей вначале и конца, то возвратите тот шаблон

Ваш regex не возвратится, "который шаблон", он только возвратит true. Вам нужны скобки для овладения шаблоном: /^(0+)$/

1
ответ дан 18 December 2019 в 06:52
поделиться

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

1
ответ дан 18 December 2019 в 06:52
поделиться
/(^0+|0+$)/
0
ответ дан 18 December 2019 в 06:52
поделиться

Я всегда помещал своего Regex в человеческие слова, чтобы удостовериться, что это - то, что я имел в виду.

Это: $ ^0+

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

Помните, regex является в основном набором операторов "If". Таким образом, сначала это должно быть "верно", и ЗАТЕМ это возвратит самый лучший результат. Regex никогда не будет возвращать "несколько истинное", или "главным образом истинный" результат.

0
ответ дан 18 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: