Ruby 1.9和Javascript regexp的区别

10
除了JavaScript的^$与Ruby的\A\z等效之外,这两种正则表达式引擎还有哪些细微差别?
我正在寻找相同的正则表达式可能会表现不同的细微差异,例如,/^abc$/在Ruby中将匹配此内容:
123
abc
def

但在 JavaScript 中无法匹配。


1
Ruby的特定版本之间也存在差异。Ruby 1.8不支持后顾断言,而Ruby 1.9则支持。 - tybro0103
@tybro0103 哎呀,我应该指定版本的。 - user47322
1个回答

18

支持 Ruby ,但不支持 JavaScript 的特性:

  • \a(响铃)
  • \e(转义)
  • \A(字符串开头)
  • \Z(字符串结尾,在最后一行结束之前)
  • \z(字符串结尾)
  • 向前引用 \1\9
  • 失败的组的反向引用也会失败
  • (?>regex)(原子组)
  • \G(匹配尝试的开头)
  • (?#comment)
  • 支持自由空格语法
  • 字符类是单个标记
  • # 开始注释
  • [:alpha:] POSIX 字符类
  • (?i)(大小写不敏感)(JavaScript 仅支持 /i
  • (?s)(点匹配换行符)(?m)
  • (?m)^$ 匹配行结束符)(仅在 JavaScript 中使用 /m
  • (?x)(自由空格模式)
  • (?-ismxn)(关闭模式修改符)
  • (?ismxn:group)(仅对组有效的模式修改符)

支持 JavaScript ,但不支持 Ruby 的特性:

  • \cA\cZ(控制字符)
  • \ca\cz(控制字符)
  • \u0000\uFFFF(Unicode 字符)

来源:


2
不确定该页面是否最新,但在Ruby 1.9中,正则表达式引擎支持\uXXXX序列。 - d11wtq
从Ruby v2.2开始,有一些Ruby正则表达式功能在JS中不可用:(?(a)b|c)条件语句;\p{sc} Unicode属性;++占有量词;[a[^b]]集合嵌套;[a-x&&c-z]集合交集;\h十六进制类型;\k反向引用;\g子表达式调用;(?<=,(?<!,\K后顾;\u1F216,[-]星位平面字符和范围。 - Janosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接