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

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

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

1885 次点击
所在节点    正则表达式
32 条回复
laters
252 天前
NoOneNoBody
252 天前
@laters #21
你向上看,好几个人跟你说了#11 是正确答案,你都 block 了?
为什么别人给的答案你非要加个\w 呢?

PS: 我第一个回答理解错了题意,以为是要提取,但后来知道了要排除,就跟你说#11 正确了
yudoo
252 天前
chatgpt 问下比这快, 这两天刚写个脚本批量查询 mybatis 更新的表 插入的表和新增的表, 然后更新的语句批量添加更新时间, chatgpt 给的稍微改改就能用
QYJ
252 天前
@laters 我不是写 javascirpt 的 ,但是我试了一下
请这样写: [/ \bStop\b /, "custom-keyword"] 你好像是因为没有空格
这是我测试的内容:value: `213Stop Stop 213Stop Stop213 1Stop1`
QYJ
252 天前
@QYJ 不对,我这样是因为匹配了空格,抱歉
QYJ
252 天前
@laters
正常都是用 \bStop\b ,我在其他地方测试都是可以的,但是你用起来效果确实不对,不知道为什么
你可以这样写: [/\WStop\W/, "custom-keyword"],
测试的内容:value: `Stop 213Stop Stop Stop213 1Stop1`,
laters
252 天前
@yudoo 已经问了 N 次,4 都不对
laters
252 天前
@QYJ #26 好的 我尝试下
QYJ
252 天前
@laters 还是有点问题,只能匹配中间的 Stop,开始和最后的 Stop 不能用
我试了好多正则都和预期不同,我怀疑这个在线环境问题有点大,建议别整下去了
laters
252 天前
@QYJ #29 对的, 这就是问题, 很奇怪
xwh
251 天前
[/^Stop$/, "custom-keyword"]
这样?
yudoo
248 天前
@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