js 的正则阉割了多少?反向预查没有吗?

2019-01-15 23:07:19 +08:00
 wszgrcy

就是?<=,虽然说不支持,但是我在 chrome 上试了下,能进行匹配,node10 也能这么写 但是就我了解的资料来看,js 的正则确实不是完全版的,那么有没有相关资料来说明下,到底差了多少 ps,最近玩正则发现真是上瘾了,感觉这东西啥都能查出来,

4475 次点击
所在节点    程序员
19 条回复
Kimyx
2019-01-16 00:00:01 +08:00
ECMAScript 正则表达式不支持的特性
 匹配字符串开始和结尾的 \A 和 \Z 锚
 向后查找( lookbehind )
 并集和交集类
 原子组( atomic grouping )
 Unicode 支持(单个字符除外,如\uFFFF )
 命名的捕获组
 s ( single,单行)和 x ( free-spacing,无间隔)匹配模式
 条件匹配
 正则表达式注释

——「 JavaScript 高级程序设计」第 3 版
azh7138m
2019-01-16 00:41:17 +08:00
js 标准是不断更新的,https://github.com/tc39/proposal-regexp-lookbehind
Lookbehind 是 chrome62 增加的。
关于命名组 https://github.com/tc39/proposal-regexp-named-groups
其实标准就在那里,比看书好多了。
chrome 支持这些特性总归是要 v8 支持他们的,那么这么看,js (在 chrome 上面的)除去递归之外,其他的都应该会支持。
Sparetire
2019-01-16 01:56:24 +08:00
写 node 的话就只管用好了,写前端就掂量下目标用户吧。。
wuhaochen999
2019-01-16 06:10:32 +08:00
正则? 你说的是 PCRE 吧
wszgrcy
2019-01-16 06:38:21 +08:00
@Kimyx 感谢,但是第三版的书。。。我记得是 12 年吧,6 年过去了,js 这也没啥更新日志提示。。。真是蛋疼
wszgrcy
2019-01-16 06:39:52 +08:00
@azh7138m 感谢,前端也用(用户用。。。)后端有时候自己也写。。
wszgrcy
2019-01-16 06:41:06 +08:00
@Sparetire 所以说 node 下基本上已经是完全体了,没什么缺陷了?
wszgrcy
2019-01-16 06:43:42 +08:00
@wuhaochen999 我记得正则还有 posix 不过用的语言比较少是吧
nifury
2019-01-16 07:43:00 +08:00
曾经我也以为正则啥都能查出来,直到我试图用正则来解析 html...
跑题了跑题了
wszgrcy
2019-01-16 08:05:18 +08:00
@nifury 我一般都用 dom ~
lzvezr
2019-01-16 08:26:31 +08:00
推荐一个网站,可以查一下 nodejs 实现到了什么程度 https://node.green
gam2046
2019-01-16 08:33:28 +08:00
html 这样的类 xml 本文(例如 AndroidManifest 这样的文件),其实用 xpath 来检索,真的很方便。

当然用下面说的 DOM 解析同样也很方便。相比之下,用正则来做这个事情,就有点繁琐了。
66beta
2019-01-16 08:35:00 +08:00
node 你可以自己决定版本啊,用户浏览器就看用户灵性了
reus
2019-01-16 08:48:28 +08:00
正则哪来什么“完全版”,就是实现多少而已
rus4db
2019-01-16 09:08:57 +08:00
ES6 已经有了。可以看看阮一峰的文章:

http://es6.ruanyifeng.com/#docs/regex
azh7138m
2019-01-16 09:21:23 +08:00
@wszgrcy changelog 有的,你看到前端的 es 年份 ,就是那一年 js 的 changelog :D
wszgrcy
2019-01-16 09:25:33 +08:00
@mikukonai 感谢,骑驴找驴了
Sparetire
2019-01-16 13:11:15 +08:00
@wszgrcy 标准支持的特性,最新的 Node 基本上都支持了,但是不知道你说的完全体是什么。。如果你要拿正则和 perl 去比,那肯定还是少些什么
momocraft
2019-01-16 13:16:30 +08:00
形式语言中的正则按现在的语法写出来可能只有 `[]|()+*?{}` // 其中()是优先级

也许不能说是阉割(除非把 PCRE 等带无数扩展的实现当成“真正的正则”)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527398

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX