
我有一个规则清单
const keywords = [Stop,.............]monaco.languages.register({ id: "mySpecialLanguage" }); monaco.languages.setMonarchTokensProvider("mySpecialLanguage", { tokenizer: { root: [ [/(?<!\w)Stop(?!\w)/, 'keyword'] ], }, }); monaco.editor.defineTheme("myCoolTheme", { base: "vs", inherit: false, rules: [ { token: 'keyword', foreground: 'f1d710' }, ], colors: { "editor.foreground": "#000000", }, }); monaco.editor.create(document.getElementById("container"), { theme: "myCoolTheme", value: `Stop QdStop qdStop 11Stop StopSS Stop11 Stopdd `, language: "mySpecialLanguage", }); 我期望将 keywords 中的所有单词高亮显示,列表中包含 Stop,但以 Stop 结尾的单词仍会高亮显示
Stop 开头的效果是正确的,但是 Stop 结尾的效果是错误的,应该显示为黑色,而不是黄色
如何将其突出显示为仅用于停用词的关键字,如果前后有字母或单词,则不应突出显示

1 wwwwaaanng 2024-03-14 11:13:15 +08:00 不要贴代码,直接说规则 |
2 wwwwaaanng 2024-03-14 11:14:51 +08:00 如何将其突出显示为仅用于停用词的关键字,如果前后有字母或单词,则不应突出显示 没看懂你这句话想要什么规则 |
3 InDom 2024-03-14 11:15:33 +08:00 零宽断言 |
4 A3m0n 2024-03-14 11:16:37 +08:00 原文本单词和单词之间有空格分割吗? 是这样的吗? Stop One AppleStop |
5 alexsz 2024-03-14 11:24:34 +08:00 \bStop\b |
6 laters OP @alexsz 这样并不行 |
7 laters OP @wwwwaaanng #2 只匹配 Stop 其余的全部匹配 |
9 laters OP @wwwwaaanng #2 期望的是只匹配 Stop 其余的全不匹配,不管是 *Stop 还是 Stop* 还是 **Stop** |
11 QYJ 2024-03-14 14:47:11 +08:00 ^Stop$:适合字符串为“Stop” \bStop\b:适合字符串中,有独立的 Stop 单词 |
12 NoOneNoBody 2024-03-14 15:08:10 +08:00 ^Stop|Stop$ 适合 Stop 位于开头或结尾,不能匹配位于中间的情况 如果任意位置,直接用 Stop 不加其他符号就行了 |
13 laters OP @NoOneNoBody 只想要 Stop 独立存在的时候匹配上, xxxxStop Stopxxx 都不应该匹配上 |
15 lynan 2024-03-14 15:30:16 +08:00 11 楼已经给了答案了。 就是 **^Stop$* |
16 lynan 2024-03-14 15:30:34 +08:00 ^Stop$ |
17 NoOneNoBody 2024-03-14 15:32:48 +08:00 @laters #13 按例子和要求。#11 就可以了 |
18 llh880808 2024-03-14 15:35:01 +08:00 正文里的(?<!\w)Stop(?!\w)就是零宽断言的写法,要求 stop 前后不是\w 更简洁的写法就是 5L 提供的 \bStop\b ,要求 Stop 前后必须是 boundary 我不知道你为什么测试失败,因为我在 regex101 测试两种写法都是 ok 的,链接如下: https://regex101.com/r/5Ifg8u/1 |
19 llh880808 2024-03-14 15:37:35 +08:00 |
21 laters OP |
22 NoOneNoBody 2024-03-14 15:52:40 +08:00 @laters #21 你向上看,好几个人跟你说了#11 是正确答案,你都 block 了? 为什么别人给的答案你非要加个\w 呢? PS: 我第一个回答理解错了题意,以为是要提取,但后来知道了要排除,就跟你说#11 正确了 |
23 yudoo 2024-03-14 16:59:01 +08:00 chatgpt 问下比这快, 这两天刚写个脚本批量查询 mybatis 更新的表 插入的表和新增的表, 然后更新的语句批量添加更新时间, chatgpt 给的稍微改改就能用 |
24 QYJ 2024-03-14 17:10:36 +08:00 @laters 我不是写 javascirpt 的 ,但是我试了一下 请这样写: [/ \bStop\b /, "custom-keyword"] 你好像是因为没有空格 这是我测试的内容:value: `213Stop Stop 213Stop Stop213 1Stop1` |
26 QYJ 2024-03-14 17:31:27 +08:00 @laters 正常都是用 \bStop\b ,我在其他地方测试都是可以的,但是你用起来效果确实不对,不知道为什么 你可以这样写: [/\WStop\W/, "custom-keyword"], 测试的内容:value: `Stop 213Stop Stop Stop213 1Stop1`, |
29 QYJ 2024-03-14 17:47:57 +08:00 @laters 还是有点问题,只能匹配中间的 Stop,开始和最后的 Stop 不能用 我试了好多正则都和预期不同,我怀疑这个在线环境问题有点大,建议别整下去了 |
31 xwh 2024-03-15 10:12:34 +08:00 |