@md-misko 感谢你的 PR!
你确定吗?我有点惊讶。我认为如果你的正则表达式足够贪婪,你应该能够匹配它。请注意,从边界字符中删除点会破坏句子末尾单词的链接化。
我在 regex101.com 上用你的正则表达式做了一个小测试,它似乎可以与当前的边界字符一起工作,请参阅 regex101: build, test, and debug regex
请注意,如果我正确理解你的目的,你可能需要将一些捕获组转换为非捕获组,使用 (?:)
无法使用 | 确实很烦人,同意。请注意,对于 ID|id 部分,你只需使用 i 修饰符即可使正则表达式不区分大小写。对于数字,如果你确实需要 1-10 和 1-100 的确切范围,那么这很棘手,放宽到 1-19 和 1-199 会更容易。 
这是你的正则表达式,使用了我认为应该可以工作的非捕获组
/id\\s?((?:[1-9]|10)\\.(?:[1-9]|[1-9][0-9]|100))/i, https://example.com/id$2
@danekhollas 感谢您的反馈和正则表达式!我已根据您的评论修改了代码,PR 已准备好进行审查。
1 个赞
太棒了!不过 Discourse 团队的某个人需要审核一下,@sam\n\n请注意,您可以直接从您 fork 的仓库安装扩展(甚至可以指定分支)。
1 个赞
sam
(Sam Saffron)
215
首先,我想弄清楚,为什么用户要使用该组件而不是内置的监视词?
4 个赞
我发现内置监视词存在两个主要问题
- 无法添加复杂的正则表达式:发生错误:单词太长(最多 100 个字符)
- 无法使用任意字符作为单词边界:即下划线
- 此外,无法编辑规则或更改执行顺序也并非理想
该组件的 PR 将单词边界暴露给用户,并且没有长正则表达式的问题(除了无法使用 |,这在 PR 中也得到了解决)。
否则,监视词工作得很好,如果这些问题可以在核心中得到解决,我将全力支持。
已根据 Auto-Linkify Words - #216 by md-misko 单独发帖,不确定这些是否算作 bug:
Watched words 不支持 unicode,它将所有 unicode 字符都视为单词边界(在使用 \b 时,但这可以预期)。
还有更多(对 watched words 运行了一些测试用例,发现了这两个):
- watched word
\"\\bid\\(d+)\\b\" 是一个无效的正则表达式。(属实,但它仍然添加了规则)
\\bid\\s?(\\d+)\\b → https://example.com/id$1 被链接化为 https://example.com/id%241(添加了 urlencoded 的 $1 而不是进行替换)
替换不支持还是这是一个 bug?
jrgong
(jrgong)
218
到目前为止,有人找到使用竖线 | 的解决方法吗?我有一些正则表达式,其中它们至关重要。
danielabc
(Daniela)
219
renato
(Renato Atilio)
220
您好,
您链接的这个主题组件是我基于 Sam 的组件进行的改编,目的是为了解决您在另一个主题中描述的需求。
它们是简单的组件,仅根据管理员管理的主题组件设置来更改帖子中这些单词的呈现方式(Sam 的组件将特定单词转换为链接,我的组件将特定单词转换为图片)。
您描述的功能无法在主题组件中实现,需要一个插件来在数据库中存储每个用户的(单词、图片 URL)集,并且单词到图片的转换应该在服务器端完成,即在构建已烹饪的帖子(HTML)内容时进行。主题组件无法实现这些,因为它只包含前端/客户端代码(如果您聘请某人来完成这项工作,他们必须了解这些细节至关重要)。
这超出了此主题组件的范围,需要更复杂的工作。建议您在 Marketplace 发布您希望此功能如何实现的详细信息,您可以在这里聘请一位熟悉 Discourse 内部工作原理的人员来帮助您。
此主题已多次提及,但我想再次确认;是否有办法将其限制在特定类别或排除类别?我想在我们的新手类别中使用它来链接新手需要学习的所有基本术语,但在其他区域,这些对有经验的用户来说只会很烦人。谢谢!
3 个赞
我发现了一个令人讨厌的限制:给定一个正则表达式,$1 只能被替换一次。
示例
/foo-([0-9a-f]+)/,https://target.example/foo/$1/foo-$1
预期
| 关键字 |
链接 |
foo-abcd |
https://target.example/foo/abcd/foo-abcd |
实际
| 关键字 |
链接 |
foo-abcd |
https://target.example/foo/abcd/foo-$1 |
已关注的词语的问题在于,一个已关注的词语会被链接与其在帖子中出现的次数一样多。这会造成混乱。
附注:快速说三遍。
Canapin
(Coin-coin le Canapin)
226
准确地说,这个词是每行替换一次,而不是每篇帖子替换一次。 
@Canapin 您忽略了我的问题:问题不在于重复的单词,而在于单个单词的重复模式替换:URL 包含要替换的模式_两次_。
由于插件中默认设置了 /g 模式替换选项,它应该应用于替换中_所有_ $1 的出现,而不仅仅是第一个。
这与在句子、行或段落中出现多次关键字的情况不同。_替换_应该考虑选择项的多次出现。
1 个赞
Canapin
(Coin-coin le Canapin)
231
我指的是 linkify 单词组件,而不是监视单词功能 
@hellekin,感谢您的澄清 
我当时是在回复 Sam 关于“监视的词语”的问题。
很高兴知道 linkify 只处理一个,但我希望它能处理每帖一个。我可能今天就要试试这个了,“监视的词语”有时在找到匹配项时简直无法忍受。
1 个赞