Javascript 使用&&;字符类中的运算符
类似的东西在Ruby中工作,但在Javascript中不起作用:Javascript 使用&&;字符类中的运算符,javascript,ruby,regex,Javascript,Ruby,Regex,类似的东西在Ruby中工作,但在Javascript中不起作用: str = "now is the time" p str.gsub(/[a-z&&[^aeiou]]/, '*') 注意第二行的& [a-z&[^aeiou]]有效,但是如果您删除整个正则表达式周围的[],并使用a-z&[^aeiou]则无效。为什么?这是Ruby独有的吗?我找不到有关此功能的更多信息 一个字符类可能包含另一个字符类。这本身并不有用,因为[a-z[0-9]]描述了与[a-z0-9]相同的集合。但
str = "now is the time"
p str.gsub(/[a-z&&[^aeiou]]/, '*')
注意第二行的&
[a-z&[^aeiou]]
有效,但是如果您删除整个正则表达式周围的[]
,并使用a-z&[^aeiou]
则无效。为什么?这是Ruby独有的吗?我找不到有关此功能的更多信息
一个字符类可能包含另一个字符类。这本身并不有用,因为[a-z[0-9]]
描述了与[a-z0-9]
相同的集合。但是,字符类还支持&
操作符,该操作符对其参数执行集合交集。这两者可以按如下方式组合:
/[a-w&&[^c-g]z]/ # ([a-w] AND ([^c-g] OR z))
这相当于:
/[abh-w]/
此运算符在Javascript中确实不可用。在正则表达式中
&&
是字符类交集的运算符。Ruby的正则表达式引擎被称为,这里是从文档中摘录的一部分(重点添加):
字符类
^。。。负类(最低优先级运算符)x-y范围从x到y
[…]集(字符类中的字符类)
。&&。。交叉点(下一个^的优先级较低)
至于为什么它不能在JS中工作,我不知道,可能是因为这个引擎没有实现这个操作符。以Java为例,它可以工作。这看起来像是一个关于JavaScript而不是Ruby的问题,但被标记为Ruby。嗯,包含的代码是Ruby,所以我不认为有理由排除“Ruby”标记。我在上面写评论时,它甚至没有被标记为JavaScript。