- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想捕获对@usernames 的提及。用户名有这些规则:
所以,我想到了这个:
/(?:^|\s)(@)(?!\.)(?!.*\.\.)(?!.*\.[\s|$])([a-z0-9\.]+)(?:\s|$)/gm;
应该是:
(?:^|\s) starting at start of line, or with a whitespace
(@) having a @
(?!\.) name not starting with a dot
(?!.*\.\.) not containing two adjacent dots (..)
(?!.*\.[\s|$]) not ending with a dot (yes this sucks)
([a-z0-9\.]+) allowed chars
(?:\s|$) ending at EOL or whitespace
作为一个完全的正则表达式菜鸟,我很高兴看到它在一个长的多行测试字符串上的表现如何。但后来我尝试了最简单的测试字符串,比如:
@foo @bar I hate you both.
在这种情况下,foo 被捕获,但 bar 没有。我想,即使我使用非捕获组,@foo
也会使用以下空格,因此 @bar
在 (?:^|\s)
。
我应该如何编辑此正则表达式以使其正常工作?
请不要建议完全不同的@mention 正则表达式,我可以很好地搜索它们,因为还有其他问题。我只是想让它工作,并想知道它为什么不工作。
最佳答案
一般来说,您在这里遇到的问题是您对单词开头和结尾的空格使用了捕获组,这意味着这些字符会被进一步的 RegEx 匹配消耗掉。
这是因为你做了:(?:...)
.
相反,您可以使用一种不消耗字符的特殊捕获组,称为 Lookahead:(?=...)
RegEx中有Lookbehind AND Lookahead,分别检查RegEx前后。对您的问题的完美回答将同时使用 lookbehind 作为字符串的开头 (?<=^|\s)
并向前看字符串的末尾 (?=\s|$)
.不幸的是,在 Javascript 中,Lookbehind 不受支持,但对于您的特定需求,我们可以解决这个问题。
如果我们确保不捕获用户名末尾的尾随空格,则它可用于匹配您在 RegEx 开头定义的捕获组。这是代码:
(?:^|\s)(@)(?!\.)(?!\S*\.\.)(?!\S*\.[\s|$])([a-z0-9\.]+)(?=\s|$)
请注意,除了最后一节中的“=”、“不以点结尾”部分中的“\S”和“不包含两个相邻的点”之外,其他内容几乎相同,您在下面的评论。
可以查到结果here .不幸的是,这会返回包含“@bar”空格的完整匹配项,但该匹配项的子组看起来仍然不错。
如果这有帮助,请告诉我!
关于javascript - 如何修复此@mention 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42103580/
如何使用 angular2-mentions 将 URL RouterLink 添加到 @mention 用户。 我的代码是: 如何添加这个: {{contactNames}} 对此有什
我正在尝试实现 jquery.mentions,以便在输入 @ 符号时提示系统中的用户。 一切运行良好,使用 Ajax 查询来填充列表。 但是,编辑现有评论时我很挣扎。 我已将默认文本设置为之前生成的
所以我一直在试图弄清楚这个正则表达式的含义 - 但我并没有走得太远。 (\w+\.?(?:\w+)?) 语言是 Javascript。 我理解这个正则表达式的部分内容 - 它看起来像是捕获点、任何单词
我正在努力想出一个只能在单词开头找到 ampersat 的正则表达式。例如: 这里:@dog 去了公园。 但不是这里:d@og 去了公园。 或者在这里:The@dog 去了公园。 本质上,我只是想捕获
我正在构建一个基本的 Twitter 客户端应用程序。我正在尝试弄清楚如何使包含推文的 TextView 自动链接 @mentions,以便它们链接到与推特网站上相同的任何人的推特页面。我的猜测是,这
尝试用 anchor 标记替换所有出现的@mention,到目前为止我有: $comment = preg_replace('/@([^@ ])? /', '@$1 ', $comment); 采用以
我尝试使用 this 中的 Mention.js . 我的 Search.html 包含, $('#try').mention({ delimiter: '@', users
我想在我的文本区域中显示由单词 @ 触发的自动完成表单,就像这个库 http://ichord.github.io/At.js/但只使用 angularjs 和 css 我应该写什么样的指令?另外,有
我想捕获对@usernames 的提及。用户名有这些规则: 只能使用小写字母、数字或点 (.) 不以点开头或结尾 连续不超过一个点(例如,不允许使用 user..name,但可以使用 us.er.na
我有这个来自 Andrew Whitaker 的自动完成插件 - DEMO 假设我在 textarea 中有一个字符串 "@peterwateber welcome" 我希望它在隐藏标签中输出为 "@
我现在的代码是这样的: var regex = '@([a-z0-9_]+)'; replacedText = replacedText.replace(regex, '$1'); 但是,当我输入“你
StackOverflow 用户, 我意识到新的“@mentions”是 facebook 的一项非常新的功能,但是你们中有人能想到如何使用 Facebook API 访问此功能吗? 我假设需要一个单
我正在尝试为当前登录的用户显示@mentions,但收到语法错误,而且我不知道它是什么。我的数据库是 mysql,我的查询当前如下所示: $sql = "SELECT users.userna
所以我有这个正则表达式 /(?:[\s.]|^)@(\w+\.?(?:\w+))/g 这错误地给出了提及之前的句号 - 例如 .@blah. 是否匹配并捕获了前面的句号。 此外,当我这样做时 - 句子
嘿伙计们,我正在使用这个plugin来自霍基。它就像 Twitter,你可以在其中@提及某人。我的输出有问题。这个方法: updateHidden: function() { var
我正在尝试使用 jquery ajax php 制作一个 facebook 和 twitter 风格的提及系统,但如果我尝试@mention 超过一个用户,我会遇到问题。例如,如果我开始输入如下内容:
我想做什么 我想在聊天 Activity 中提及人和组。当用户输入@时,我想填充不包含用户和 channel 的列表这样他就可以同时提及人和 channel 我做了什么 我从这个问题中得到了帮助And
问题 : 我正在尝试为使用 draft-js 创建的内容创建一个编辑界面+ draft-js-mention-plugin .然而,editorState没有坚持,只有纯文本。提及被保存为对象数组。现
在 Angular 提及库的帮助下,我实现了一个允许我提及多个用户的文本区域。 有没有办法保存选中用户的ID?如果可能,将它们保存为字符串数组。 示例:我选择了用户姓名 1、姓名 2、姓名 3 ...
我正在使用 Rails 3.2 应用程序,我需要为文本区域提供自动建议,以在同一文本区域中获取 @mentions 用户和 #tags。 详细说明:当用户开始输入@ab时...自动建议应该从提供的js
我是一名优秀的程序员,十分优秀!