我在 javascript 中创建了一个简单的正则表达式来解析字符串并将句点之前的内容保存在字符串中。还有一个额外的限制,在句点之后必须是一个或多个大写字母字符:
var r=/([^.]*\.)[A-Z]+.*/gm
var col=r.exec(str)
现在我在大多数浏览器中使用此正则表达式没有问题: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 个或多个不是句点的字符,然后是句点,这部分应该被捕获。然后它应该在句点之后继续匹配一个或多个大写字母字符,然后是零个或多个任何类型的字符。为什么这与上面的一些示例不匹配?
最佳答案
你能试试这个正则表达式吗:
var r = /([^.]*\.)[A-Z]+/;
您实际上并没有在这里使用 g
或 m
标志,所以为什么还要使用它们。 m
用于在多行输入中使用 ^ 和 $
,g
用于全局。
有关在 Android 2.3.3 浏览器中使用全局开关的可能原因,另请参阅:https://github.com/f0r4y312/jquery-stylesheet/issues/4
关于javascript 正则表达式在 Android 2.3 股票浏览器中神秘地无法匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250019/