У меня есть довольно простое выражение регулярного выражения,String.prototype.match различие между Chrome/Safari и FireFox
"lang-bash".match("lang-([a-z]+)", "gi")
И последняя Chrome (43-иш) я получаю ожидаемое поведение ["lang-bash", "bash"]
. Когда я пытаюсь сделать то же самое на последнем FireFox (39 или 41a), я получаю ["lang-bash"]
. Я также пробовал это в Safari (8.0.7), и он имеет ожидаемый результат от ["lang-bash", "bash"]
.
Так что это может быть ошибка в FireFox, на которую я могу подать заявку, но я ожидаю, что это просто то, что я не понимаю. Благодаря!
Редактировать: Хорошо ... так что еще несколько тестов.
FireFox
"lang-bash lang-dash".match(/lang-([a-z]+)/i)
Array [ "lang-bash", "bash" ]
"lang-bash lang-dash".match(/lang-([a-z]+)/ig)
Array [ "lang-bash", "lang-dash" ]
"lang-bash lang-dash".match("lang-([a-z]+)", "gi")
Array [ "lang-bash", "lang-dash" ]
Safari
"lang-bash lang-dash".match(/lang-([a-z]+)/i)
[ "lang-bash", "bash" ]
"lang-bash lang-dash".match(/lang-([a-z]+)/ig)
[ "lang-bash", "lang-dash" ]
"lang-bash lang-dash".match("lang-([a-z]+)", "gi")
["lang-bash", "bash"]
Chrome
"lang-bash".match(/lang\-([a-z]+)/i)
["lang-bash", "bash"]
"lang-bash".match(/lang\-([a-z]+)/gi)
["lang-bash"]
"lang-bash lang-dash".match("lang-([a-z]+)", "gi")
["lang-bash", "bash"]
Поскольку есть захват, я бы ожидать, результат чего-либо с флагами ig
быть [ "lang-bash", "lang-dash", "bash", "dash" ]
но я Думаю, это совсем не правильно. Кажется, что все браузеры действуют по-другому. Кто-нибудь знает, что происходит?
Это похоже на массив захватов, начиная от группы 0 до группы 1. Что вы ожидали? На некоторых языках 'match' будет соответствовать всей строке, поэтому глобальная опция' g' не имеет смысла. Возможно, вы ищете поиск или поиск. – sln
'g' не должно быть бессмысленным, потому что мой вход может иметь несколько значений. Только пример, который я дал, нет. Создание более значимой строки ввода делает меня еще более запутанным. Я действительно просто забочусь о захватах. – Travis