在PCRE中,这将是一个有效的表达式
/^\!(foo|bar) ((?i)ab|cd|ef|gh)$/
但在JavaScript Regex中,这是无效的.不幸的是我不知道(?i)
叫什么,所以我在google它时遇到了一些麻烦.如何将此给定示例翻译为在JavaScript中有效?
我真正想做的事情:
发现与开始的所有行!foo
或!bar
后面加一个空格和结束ab
,cd
,ef
或gh
.后者应该不区分大小写.
!foo CD !foo cD !foo cd
一切都会有效.而
!FOO cd!Foo cd
会无效的
它(?i)
是case-insensitive flag
:从正则表达式中放置它的位置开始,它使所有character class
包含的字母[a-z]
也匹配[A-Z]
(并且反之亦然).这也适用于单个字母a
(匹配a
和A
)或序列ab
(匹配ab,Ab,aB,AB
).
所以你可以把它放在你的正则表达式的开头/(?i)regex/
(使它等同于js /regex/i
),或者你可以将它与它的相反使用它(?-i)
只做一部分正则表达式case-insensitive
:
/^(?i)[a-z]{2}(?-i)[a-z]{2}/
上面的正则表达式匹配2个大写或小写字符加上2个严格小写的字符.
比赛 - > ROck,rOck,Rock
Not Matches - > ROCK,roCk,rOcK
你的PCRE正则表达式怎么样?
/^\!(foo|bar) ((?i)ab|cd|ef|gh)$/
如果您不介意匹配也!Foo,!FOo,!foO,!fOO,!BAR,!bar,...
可以将字符串放在外面,如下所示:
/^!(foo|bar) (ab|cd|ef|gh)$/i # you can also remove the escape from \! -> !
如果你想要相当于原始PCRE正则表达式(/^!(foo|bar) ((?i)ab|cd|ef|gh)$/
)的等价js正则表达式,则可读性较差:
/^!(foo|bar) ([Aa][Bb]|[Cc][Dd]|[Ee][Ff]|[Gg][Hh])$/