不知何故
var regex=/a(?i)b/;让Firefox中的JS控制台告诉我“无效量词”。你知道这是怎么回事吗?
更新:
我刚刚在http://regex101.com/r/iW3kE7上看到(?i)似乎不适用于JS (但在php中)。如何在JS中执行本地修饰符这样的操作?
我试图通过(?i)介绍大小写不敏感的。
发布于 2014-06-19 09:29:24
对更新问题的回答
我想介绍一下
(?i)对大小写不敏感的观点。
在JavaScript中不能这样做,整个表达式要么区分大小写,要么不区分大小写。通过在末尾使用i标志得到一个不区分大小写的表达式:
var rex = /expression/i;因此,如果您的目标是匹配a (小写)和b或B,则表达式如下:
var rex = /a[bB]/;我确信您的实际用例并不是那么简单,因此对于您真正的表达式来说,这将使事情变得相当复杂,但不幸的是,没有办法开始区分大小写,然后切换到大小写不敏感的部分。要么执行字符类操作(上面),要么将其拆分为多个表达式,然后确保第一个表达式的匹配与第二个表达式匹配。实际上,您可能会创建一个接受一系列正则表达式的实用函数/对象,并查找彼此相邻的表达式的匹配,例如:
var matcher = new MyNiftyMatcherThing(/a/, /b/i);
if (matcher.exec(someString)) {
// ...
}在澄清问题之前的回答
? (意为“0或1”的量词)必须引用它前面的某个东西,但是捕获组中没有任何东西可供它参考。
你还没有说出你在做什么,但是如果你的目标是在a和b之间有一个或没有一个b,并且捕捉它,如果它在那里,你只会让字符颠倒:
var regex=/a(i?)b/;如果您的目标是使i可选而不捕获它,则可以将量词与非捕获组组合起来(因此它只适用于i,而不是a):
var regex=/a(?:i?)b/;如果您的目标是创建一个非捕获组(虽然我不太确定为什么您只需要一个字母i),那么您需要一个?之后的:。
var regex=/a(?:i)b/;(或者有(?=...)表示正前瞻,(?!...)表示负前瞻。)
发布于 2014-06-19 09:29:33
如果您试图匹配a,然后是可选的i,然后是b,那么正确的语法是将量词?放在i之后。
var regex=/a(i?)b/;正如mentioned在他的回答中提到的,表达式中的?并不是量化任何东西,因此它是无效的。
发布于 2014-06-19 09:32:32
将?放在括号外,使其可选,
var regex=/a(i)?b/;它与ab或aib相匹配。如果您的输入中存在aib,那么i将存储到一个组中。之后,您可以通过反向引用引用i。
https://stackoverflow.com/questions/24303224
复制相似问题