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

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

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

1349 次点击
所在节点    正则表达式
32 条回复
wwwwaaanng
55 天前
不要贴代码,直接说规则
wwwwaaanng
55 天前
如何将其突出显示为仅用于停用词的关键字,如果前后有字母或单词,则不应突出显示
没看懂你这句话想要什么规则
InDom
55 天前
零宽断言
A3m0n
55 天前
原文本单词和单词之间有空格分割吗?

是这样的吗?

Stop One AppleStop
alexsz
55 天前
\bStop\b
laters
55 天前
@alexsz 这样并不行
laters
55 天前
@wwwwaaanng #2 只匹配 Stop 其余的全部匹配
laters
55 天前
@A3m0n 期望的是只匹配 Stop 其余的全不匹配,不管是 *Stop 还是 Stop* 还是 **Stop**
laters
55 天前
@wwwwaaanng #2 期望的是只匹配 Stop 其余的全不匹配,不管是 *Stop 还是 Stop* 还是 **Stop**
laters
55 天前
@InDom 能大概写下吗。 我对正则不太了解
QYJ
55 天前
^Stop$:适合字符串为“Stop”
\bStop\b:适合字符串中,有独立的 Stop 单词
NoOneNoBody
55 天前
^Stop|Stop$ 适合 Stop 位于开头或结尾,不能匹配位于中间的情况
如果任意位置,直接用 Stop 不加其他符号就行了
laters
55 天前
@NoOneNoBody 只想要 Stop 独立存在的时候匹配上, xxxxStop Stopxxx 都不应该匹配上
laters
55 天前
@QYJ 如果这种场景呢,Stop 独立存在的时候匹配上,xxxxStop Stopxxx 都不应该匹配上
lynan
55 天前
11 楼已经给了答案了。
就是 **^Stop$*
lynan
55 天前
^Stop$
NoOneNoBody
55 天前
@laters #13
按例子和要求。#11 就可以了
llh880808
55 天前
正文里的(?<!\w)Stop(?!\w)就是零宽断言的写法,要求 stop 前后不是\w

更简洁的写法就是 5L 提供的 \bStop\b ,要求 Stop 前后必须是 boundary

我不知道你为什么测试失败,因为我在 regex101 测试两种写法都是 ok 的,链接如下:

https://regex101.com/r/5Ifg8u/1
llh880808
55 天前
@llh880808 #15

“正文里的...”后面的内容被吞掉了,重新打一遍

正文里的写法就是零宽断言,断言 Stop 前后不是`\w`
laters
55 天前

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

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

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

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

© 2021 V2EX