正则如何完整匹配整个单词

2024-03-14 09:42:22 +08:00
 laters

我有一个规则清单

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 结尾的效果是错误的,应该显示为黑色,而不是黄色

如何将其突出显示为仅用于停用词的关键字,如果前后有字母或单词,则不应突出显示

2746 次点击
所在节点    正则表达式
32 条回复
laters
2024-03-14 15:39:21 +08:00
NoOneNoBody
2024-03-14 15:52:40 +08:00
@laters #21
你向上看,好几个人跟你说了#11 是正确答案,你都 block 了?
为什么别人给的答案你非要加个\w 呢?

PS: 我第一个回答理解错了题意,以为是要提取,但后来知道了要排除,就跟你说#11 正确了
yudoo
2024-03-14 16:59:01 +08:00
chatgpt 问下比这快, 这两天刚写个脚本批量查询 mybatis 更新的表 插入的表和新增的表, 然后更新的语句批量添加更新时间, chatgpt 给的稍微改改就能用
QYJ
2024-03-14 17:10:36 +08:00
@laters 我不是写 javascirpt 的 ,但是我试了一下
请这样写: [/ \bStop\b /, "custom-keyword"] 你好像是因为没有空格
这是我测试的内容:value: `213Stop Stop 213Stop Stop213 1Stop1`
QYJ
2024-03-14 17:14:09 +08:00
@QYJ 不对,我这样是因为匹配了空格,抱歉
QYJ
2024-03-14 17:31:27 +08:00
@laters
正常都是用 \bStop\b ,我在其他地方测试都是可以的,但是你用起来效果确实不对,不知道为什么
你可以这样写: [/\WStop\W/, "custom-keyword"],
测试的内容:value: `Stop 213Stop Stop Stop213 1Stop1`,
laters
2024-03-14 17:41:35 +08:00
@yudoo 已经问了 N 次,4 都不对
laters
2024-03-14 17:41:45 +08:00
@QYJ #26 好的 我尝试下
QYJ
2024-03-14 17:47:57 +08:00
@laters 还是有点问题,只能匹配中间的 Stop,开始和最后的 Stop 不能用
我试了好多正则都和预期不同,我怀疑这个在线环境问题有点大,建议别整下去了
laters
2024-03-14 18:17:24 +08:00
@QYJ #29 对的, 这就是问题, 很奇怪
xwh
2024-03-15 10:12:34 +08:00
[/^Stop$/, "custom-keyword"]
这样?
yudoo
2024-03-18 21:28:44 +08:00
@laters 解决了吗。可以的话可以远程看下 v:luxus1727

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

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

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

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

© 2021 V2EX