<html><body><script>
var matches = /(\w+)(\s*(\w+))?/.exec("aaa");
alert(matches.length);
alert(typeof(matches[3]));
</script></body><html>
Я действительно новичок в регулярных выражениях, так что это может быть очень простой вопрос.Знак вопроса в регулярных выражениях в Javascript (странное поведение)
Регулярное выражение выше /(\w+)(\s*(\w+))?/
соответствует шаблонам типа «aaa», «123», «my_var» или «aaa bbb», «123 456», «my_var my_value».
Для выражения типа «ааа БББ», соответствует = ["aaa bbb", "aaa", " bbb", "bbb"]
, но для выражения, как «ааа», спички = ["aaa", "aaa", ???, ???]
Первое, что меня удивило, что matches.length = 4. Я ожидал это должно быть 2, но я не вижу документа, объясняющего, каким он должен быть. Как это работает?
И второе, что меня удивило, что 2 «лишние» матчи, которые я получил работают разные в 2 браузерах я проверил это в:
В Firefox 3.6.3, соответствует [2], а совпадения [3] не определены.
В Internet Explorer 6 соответствует [2] и соответствует [3] - пустая строка.
В принципе, как я должен проверить, если у меня есть «короткий» (например, «ааа») или «длинный» (например, «ааа БББ») выражение?
Это было именно то, что я хотел видеть :) – GameZelda