【问题标题】:regex capture string only if keyword does not contain specific character仅当关键字不包含特定字符时,正则表达式才捕获字符串
【发布时间】:2016-01-11 22:18:19
【问题描述】:

我尝试创建一个正则表达式来捕获一些 netlogo 语言的关键字,以便为highlight.js 创建一个文件。我不是正则表达式的专家,但我尝试这样做是因为目前没有针对这种语言的网络语法荧光笔。

我尝试了一个捕获所有 ([a-zA-Z0-9_\.?=\*!<>:#\+/%\$\^\'&-]*) 的正则表达式,但实际上我只想捕获第一行(示例底部的第一行),并排除其中包含特殊字符的任何关键字。

random --> want to capture only this keyword
#random 
?random
random?
ran?dom
rand#om
random#

只有第一行 (random) 需要被最终的正则表达式捕获。其他行是netlogo中变量的授权名称,但不识别关键字。

更新 1: 对于每个特殊的正则表达式命令,似乎需要将 /w 转换为 //w。

评论(^|\s)(\w+)(?=\s|$) 中的整个命题不能直接在hightlight.js 中起作用。我尝试(^|\\s)(\\w+)(?=\\s|$),但在这种情况下,选择了任何关键字:-/

部分lexemes: '(\\w+)(?=\\s|$)' 工作但仅捕获部分用例。例如,random# 会突出显示。

【问题讨论】:

  • 你尝试的正则表达式是什么?请将其发布在问题正文中。
  • 哎呀,我更正了帖子
  • 在我看来你需要像(^|\s)(\w+)(?=\s|$) 这样的东西。访问 Capture Group 1,您将获得您的价值。
  • 是的,它适用于 regex101 网站,但不适用于 highlighter.js lexeme regex parser here
  • 我直接在github上提问,完成后我在这里发布答案。

标签: regex syntax-highlighting netlogo


【解决方案1】:

试试:^(\s*)\w+(\s|$)

在 java 中,\ 可能应该写成\\

Regexbuddy-Picture 中的正则表达式:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2011-07-22
    相关资源
    最近更新 更多