首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS中的局部修饰符

问JS中的局部修饰符
EN

Stack Overflow用户
提问于 2014-06-19 09:27:56
回答 3查看 47关注 0票数 0

不知何故

代码语言:javascript
复制
var regex=/a(?i)b/;

让Firefox中的JS控制台告诉我“无效量词”。你知道这是怎么回事吗?

更新:

我刚刚在http://regex101.com/r/iW3kE7上看到(?i)似乎不适用于JS (但在php中)。如何在JS中执行本地修饰符这样的操作?

我试图通过(?i)介绍大小写不敏感的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-19 09:29:24

对更新问题的回答

我想介绍一下(?i)对大小写不敏感的观点。

在JavaScript中不能这样做,整个表达式要么区分大小写,要么不区分大小写。通过在末尾使用i标志得到一个不区分大小写的表达式:

代码语言:javascript
复制
var rex = /expression/i;

因此,如果您的目标是匹配a (小写)和b或B,则表达式如下:

代码语言:javascript
复制
var rex = /a[bB]/;

我确信您的实际用例并不是那么简单,因此对于您真正的表达式来说,这将使事情变得相当复杂,但不幸的是,没有办法开始区分大小写,然后切换到大小写不敏感的部分。要么执行字符类操作(上面),要么将其拆分为多个表达式,然后确保第一个表达式的匹配与第二个表达式匹配。实际上,您可能会创建一个接受一系列正则表达式的实用函数/对象,并查找彼此相邻的表达式的匹配,例如:

代码语言:javascript
复制
var matcher = new MyNiftyMatcherThing(/a/, /b/i);
if (matcher.exec(someString)) {
    // ...
}

在澄清问题之前的回答

? (意为“0或1”的量词)必须引用它前面的某个东西,但是捕获组中没有任何东西可供它参考。

你还没有说出你在做什么,但是如果你的目标是在a和b之间有一个或没有一个b,并且捕捉它,如果它在那里,你只会让字符颠倒:

代码语言:javascript
复制
var regex=/a(i?)b/;

如果您的目标是使i可选而不捕获它,则可以将量词与非捕获组组合起来(因此它只适用于i,而不是a):

代码语言:javascript
复制
var regex=/a(?:i?)b/;

如果您的目标是创建一个非捕获组(虽然我不太确定为什么您只需要一个字母i),那么您需要一个?之后的:。

代码语言:javascript
复制
var regex=/a(?:i)b/;

(或者有(?=...)表示正前瞻,(?!...)表示负前瞻。)

票数 2
EN

Stack Overflow用户

发布于 2014-06-19 09:29:33

如果您试图匹配a,然后是可选的i,然后是b,那么正确的语法是将量词?放在i之后。

代码语言:javascript
复制
var regex=/a(i?)b/;

正如mentioned在他的回答中提到的,表达式中的?并不是量化任何东西,因此它是无效的。

票数 0
EN

Stack Overflow用户

发布于 2014-06-19 09:32:32

将?放在括号外,使其可选,

代码语言:javascript
复制
var regex=/a(i)?b/;

它与ab或aib相匹配。如果您的输入中存在aib,那么i将存储到一个组中。之后,您可以通过反向引用引用i。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24303224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档