регулярное выражение javascript таинственным образом не соответствует в Android 2.3 stock browser
Я создал простое регулярное выражение в javascript для разбора строки и сохранения того, что находится перед точкой в строке. Существует также дополнительное ограничение, что после точки должен появиться один или несколько букв верхнего регистра:
var r=/([^.]*.)[A-Z]+.*/gm
var col=r.exec(str)
Теперь у меня нет проблем с этим регулярным выражением в браузере mosts: Firefox, Chrome и т. д. Однако в более старом браузере (стоковый браузер для Android 2.3) я получаю таинственные сбои, которые я не понимаю.
"a.A1" <- does not match in Android 2.3 stock browser
"A.A1" <- does match
"a.B2" <- does not match in Android 2.3 stock browser
"A.B2" <- does match
"a1.A1" <- does not match in Android 2.3 stock browser
"a1.B2" <- does match
"a1.C2" <- does not match in Android 2.3 stock browser
Я в недоумении, чтобы объясните, что здесь происходит. Если я понимаю свое регулярное выражение, оно должно соответствовать 0 или более символам, которые не являются точкой, за которой следует точка, и эту часть Оно должно захватить. Затем он должен продолжать соответствовать одному или нескольким буквам верхнего регистра после точки, за которыми следует ноль или более символов любого вида. Почему это не соответствует некоторым из приведенных выше примеров?
2 ответов:
Можете ли вы попробовать это регулярное выражение:
var r = /([^.]*\.)[A-Z]+/;Вы на самом деле не используете
gилиmфлаги здесь, так зачем вообще их использовать.m- для использования^ and $в многострочном вводе иg- для глобального.Также смотрите это для возможной причины использования глобального переключателя в браузере Android 2.3.3: https://github.com/f0r4y312/jquery-stylesheet/issues/4
Я бы предположил, что ваша проблема связана с использованием одного и того же регулярного выражения несколько раз с
.exec()с флагомg. Когда вы делаете это, он сохраняет состояние (как свойство.lastIndex) в объекте регулярного выражения для выполнения более одного соответствия, и это влияет на ваш следующий вызов.exec()с тем же регулярным выражением.Если вы не вызываете
.exec()несколько раз в одной строке, чтобы найти несколько совпадений, то удалите флагgиз регулярного выражения, чтобы решить эту проблему. Если это не так практично, то вы можете сбросить свойство.lastIndexдо 0 перед вызовом следующего матча.
Comments