社区
JavaScript
帖子详情
关于正则《零宽断言语法》的一点点疑问。求进来指教或一起学习。
Left_you
2011-10-20 06:27:16
① (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
② (?=exp) 匹配exp前面的位置
③ (?<=exp) 匹配exp后面的位置
④ (?!exp) 匹配后面跟的不是exp的位置
⑤ (?<!exp) 匹配前面不是exp的位置
①、③,⑤貌似有语法错误。
②和④ 求具体例子,以及详细的说明。
...全文
110
7
打赏
收藏
关于正则《零宽断言语法》的一点点疑问。求进来指教或一起学习。
① (?exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) ② (?=exp) 匹配exp前面的位置 ③ (?<=exp) 匹配exp后面的位置 ④ (?!exp) 匹配后面跟的不是exp的位置 ⑤ (?<!exp) 匹配前面不是exp的位置 ①、③,⑤貌似有语法错误。 ②和④ 求具体例子,以及详细的说明。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Mr-Jee
2011-10-21
打赏
举报
回复
var str = 'Zheng Yi Jian';
var reg = /^(\S+)\s*(\S+)\s*(\S+)$/;
var m = reg.exec(str);
alert(m[1]);
举个例子吧。。。
具体的方法很多 这个应该算简单的。
Left_you
2011-10-21
打赏
举报
回复
理解了!
只是我还想问一个, 捕获到的字符串能不能放到javascript的变量里面去?
比如: /^(\d{0,10}) (\d{0,10}) (\d{0,10})$/ 这个匹配一个外国人名字,假如我想拿到他的first name 放到变量 fname里面,怎么做?有直接的方法吗?
这个,间接的思路倒是有,比如substr()、substring()、replace()之类的。
中午结贴...
q107770540
2011-10-21
打赏
举报
回复
顶楼上
正则表达式在不同的语言下,所支持的语法也不同
如JS就不支持命名捕获组和逆序环视
对正则支持最好的还是。NET
Mr-Jee
2011-10-21
打赏
举报
回复
① (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
② (?=exp) 匹配exp前面的位置
③ (?<=exp) 匹配exp后面的位置
④ (?!exp) 匹配后面跟的不是exp的位置
⑤ (?<!exp) 匹配前面不是exp的位置
首先 javascript不支持1 3 5 即命名分组、逆序环视。
其次 断言的作用是做一次预查,预判断。比如
^(?!a)abc
在匹配"bcdef"的时候
首先从开始进行匹配,当走到(?!a)的时候先判断
"bcdef"
中的b位置是否是a,如果是,则匹配失败,本例中是b而不是a,所以(?!a)没有匹配,所以负断言就成立,接下来开始匹配abc,这个时候还是从b的位置开始匹配(重点:断言是不占据匹配字符的,因此又叫零宽断言),本正则本身是个矛盾的正则,所以不可能匹配。具体的,可以参考《精通正则表达式》一书,或楼上所说过客的正则博客。都是非常优秀的资料
诺维斯基
2011-10-21
打赏
举报
回复
[Quote=引用 1 楼 left_you 的回复:]
(?!1)\d* 这个匹配 不以1开头的数字
(?!1|2)\d* 这个匹配 不以1或2开头的数字
问题就是 (?=exp)了, 不了解。。。
尤其是(?=exp)和(?!exp)组合来匹配字符串的头尾部分,不知道怎么写了。
所以这里主要是求(?=exp) 以及(?=exp)、(?!exp)组合的例子。
顺便问问①、③,⑤是不是真的有语法错误?因为那个检测正则表达式的工具是……
[/Quote]
lz 听说过“过客”没有,对于在这里,学习正则的人来说 ,不知道的话,可就有点遗憾了。
给:
http://blog.csdn.net/lxcnn/article/details/4304754
肯定对你有帮助。
另外祝你:早成正则大道!!
峭沙
2011-10-20
打赏
举报
回复
①(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
②(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
③(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
④(?!pattern) 负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
没见过(?<=exp),(?<!exp)这样的写法
Left_you
2011-10-20
打赏
举报
回复
(?!1)\d* 这个匹配 不以1开头的数字
(?!1|2)\d* 这个匹配 不以1或2开头的数字
问题就是 (?=exp)了, 不了解。。。
尤其是(?=exp)和(?!exp)组合来匹配字符串的头尾部分,不知道怎么写了。
所以这里主要是求(?=exp) 以及(?=exp)、(?!exp)组合的例子。
顺便问问①、③,⑤是不是真的有语法错误?因为那个检测正则表达式的工具是我自己写的,用的javascript。
正则
表达式
零宽
断言
详解
本文详细解析了
正则
表达式中的
零宽
断言
概念,包括正向和负向
零宽
先行
断言
,阐述了其在匹配特定模式字符串时的作用与应用技巧。
史上最全
正则
表达式
语法
,文末附常用表达式!
本文介绍
正则
表达式的入门知识,涵盖元字符、重复限定符、分组、转义、条件或、区间、
零宽
断言
、捕获与反向引用、贪婪与非贪婪匹配、反义等内容,适合初学者快速掌握
正则
表达式的应用。
正则
表达式
零宽
断言
文章介绍了
正则
表达式的各种用法,包括
零宽
断言
、匹配字符、数字校验和字符校验的示例,以及如何使用Java工具类进行文本内容的查找和验证。
正则
表达式:
零宽
断言
本文解析了
正则
表达式中的
零宽
断言
概念,介绍了四种常见类型:正向/负向先行
断言
和后发
断言
。通过实例说明如何在搜索中限定内容位置而不捕获。
grep
零宽
断言
&
正则
表达式
本文深入讲解了
正则
表达式的基本概念与高级用法,包括
零宽
断言
的运用及
正则
表达式的多种匹配模式。并通过实际案例帮助读者更好地理解和掌握
正则
表达式的使用技巧。
JavaScript
87,990
社区成员
224,684
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章