不用零宽断言如何实现匹配 @ 功能

2016-07-06 18:09:55 +08:00
 ikaros

不知道标题说清楚没,就是说需要实现 @功能,但不能使用零宽断言, 需要匹配的文本格式其实比较严谨,比如 Hi @ikaros , nice to meet you! 需要匹配的用户名前面有个 @,后面有个空格. 当前的做法是 @(\\w+?)( ) 然后把 @和空格 trim 掉

PS: 这个蛋疼的需求是因为某语言的正则表达式包似乎没有实现完整的正则支持.

1937 次点击
所在节点    正则表达式
9 条回复
shyling
2016-07-06 18:22:56 +08:00
> /@(\w+) /.exec('Hi @ikaros , nice to meet you!')
[ '@ikaros ',
'ikaros',
index: 3,
input: 'Hi @ikaros , nice to meet you!' ]
判断[1]
ikaros
2016-07-06 21:04:05 +08:00
@shyling 我写的和你一样的啊 - - ? 我只能匹配到一个 @ikaros
shyling
2016-07-07 00:39:47 +08:00
@ikaros 带上 global ,然后多执行几次。。直到返回 null(当然我在说 js
shimanooo
2016-07-07 00:50:59 +08:00
for 循环到 @,从后面一个位置开始搜索, 加上^
Hello1995
2016-07-07 01:22:18 +08:00
不是很懂正则表达式,但是如果是我,我可能会选择使用 “@(\w+?)\s ” ,大概。(我是说 PHP )
UnisandK
2016-07-07 01:36:58 +08:00
不支持断言就用程序逻辑来去掉头尾这不挺好的。。
ikaros
2016-07-07 09:09:38 +08:00
@shyling 其实还有可能有多个 @的情况,所以这个方法感觉不太好

@shimanooo
@UnisandK 性能比较低吧,这样


@Hello1995 一样的啊
ikaros
2016-07-07 09:11:50 +08:00
@UnisandK 多了两次额外的函数调用和字符串复制 /传递,虽然正向预搜索应该也可能会额外增加时间
shyling
2016-07-07 10:24:04 +08:00
@ikaros 我已经说了多个的情况

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

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

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

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

© 2021 V2EX