я имел another question и хотя это был дан ответ я не понимаю, почему регулярное выражение влияет так, как этоПочему флагом Regex Javascript // g влияет на состояние?
От w3schools он говорит
г: Выполнение глобального матча (найти все матчи, а не останавливаясь после в первом матче)
Хорошо, конечно. Я понимаю. Вот почему я получаю массив в этом коде
var str="The rain in SPAIN stays mainly in the plain";
var patt1=/ain/gi;
document.write(str.match(patt1));
Выход:
ain,AIN,ain,ain
Regex схожа с /g
он заменит более одного экземпляра.
Однако в матче
var re=/hi/gi;
alert(re.test("hi") + " " + re.test("hi"));
Результат "истинно ложь".
Теперь почему $%^& делает это? Строка в обоих тестах одинакова! Раньше я думал, что глобальный означает, что он будет искать новые строки (именно это я и хотел сделать в этом тесте). Самое первое, что я процитировал, было о том, что g является глобальным матчем.
Ничего не упоминает об этом, затрагивая СЛЕДУЮЩИЙ ВЫЗОВ! без/g код будет работать правильно (также мне не нужно переходить на новые строки). ПОЧЕМУ это влияет на следующий тест? gumbo ответ упоминает, что он влияет на lastIndex через вызовы и что%^& * я понятия не имел, что есть общее состояние, поскольку другие две функции не использовали его, пока я использовал флаг g. Я хотел только true и false, но если что-либо не должно соответствовать возврату int, содержащему количество совпадений, найденных в глобальном масштабе? (т.е. 1 в «привет», но 2 в строке «hihi»).
Почему heck g влияет на мой следующий вызов при выполнении regex.test ?! Кроме того, если вы можете, укажите, когда я действительно хочу, чтобы эта функция была включена.
w3schools не заслуживает доверия, см. [W3fools] (http://w3fools.com) для деталей. Если вы получаете информацию о JS в любом месте, получите ее из [MDN] (https://developer.mozilla.org/). – zzzzBov
@zzzzBov Я пытался найти руководство для javascript в прошлом и не думал о mdn bc, я думал, что это был firefox. хорошо, я проверю там в следующий раз! –
@ acidzombie24, для окончательного подтверждения, используйте спецификацию ECMAscript, загружаемую в формате PDF. Да, это громоздко использовать в качестве быстрой справки, но это авторитетное руководство! MDN, вероятно, является вашим первым портом по вызову, как говорит zzzzBov. – Doin