问题标签 [oniguruma]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
54 浏览

regex - 将 GFM 高亮代码块转换为 Stack Overflow 高亮代码块

1. 问题

我无法将GFM 突出显示的代码块转换为Stack Overflow 突出显示的代码块


2. 例子

例如,我需要转换:

至:


3.问题

得到突出显示的代码块,我需要在代码块内每一行的开头添加选项卡。我不明白,我该怎么做。


4.没有帮助

我的示例正则表达式:

  • 查找

    /li>
  • 替换

    /li>

Regex101 上的演示

我得到结果:

仅在代码块内的第一行的开头添加了制表符号。我能做什么,在代码块内的每一行的开头添加制表符?

0 投票
1 回答
46 浏览

regex - 正则表达式:计算匹配字符串之前的引号数量

假设我有一个要匹配的字符串:banana。问题是我想检查这个字符串是否在双引号内。我读过你可以计算整行中双引号的数量:

但是,如果我有这样的输入,它与该字符串不匹配:

在这种情况下,我仍然希望字符串匹配(避免嵌套引号),所以这意味着我需要在字符串之前计算双引号的数量。我怎样才能做到这一点?PS 我在 vscode 扩展中使用 onigurama

0 投票
2 回答
1921 浏览

javascript - 如何匹配包含特殊字符的整个单词?

我只有一个模式来匹配单词。标准是以下之一:

  • 它在第一个字母处包含数字或下划线,或者

  • 单词中至少有一个特殊字符(不包括下划线):

应该匹配

不应该匹配

到目前为止,我已经设法通过以下方式匹配其中一些:

词内有特殊字符的词除外

3testData
3test_Data
_testData
_test3Data
%data%
测试%BIN%data
测试%BIN%data
te $t&$#@daTa

0 投票
1 回答
167 浏览

visual-studio-code - 非固定字符长度后的文本配对

我正在为 Visual Studio Code 不支持的编程语言进行语法突出显示。突出显示效果很好,但我在突出显示以下代码时遇到了问题:

我使用以下方法突出显示“池”这个词:

它正在工作,但我也想突出显示 Test1、Test2 和 Test3 这三个词。

我唯一的想法是在后面使用负面的外观,如下所示:

我用这个想法创建了一个在线链接:https ://regexr.com/4793u

但是 oniguruma(TextMate 使用的正则表达式 - 以及 Ruby)不允许使用环视。来自文档

有谁知道突出显示此语法的任何替代方法?

0 投票
1 回答
46 浏览

regex - 从符号取反直到前一个空格

尝试使用 logstash grok 过滤器(oniguruma regex)过滤一些日志。对于如下所示的日志条目:

我写了这个过滤器:

对我来说,困难在于我需要将“任务”标签与以下内容完全匹配:“这是任务名称”。此时“task”匹配“this is the task name msg”。当然,这只是一个示例,单词本身会因示例而异。

这是一个 ansible 日志,它出于某种原因将任务名称和任务本身混合在同一日志行中,并且仅使用空格将它们分隔。在所有情况下,由于“=”符号,我知道任务名称已完成并且正在显示任务详细信息。

所以我需要匹配直到找到“=”,然后否定它后面的单词,在这种情况下是“msg”(取决于任务,这个词也可能改变)。

任何想法如何做到这一点?谢谢!

0 投票
1 回答
27 浏览

devops - 尝试为特定日志文件编写 Grok 模式

我正在尝试为应用程序生成的日志文件编写 Grok 模式。我无法过滤掉几个字段。输入日志文件

这两行都将在同一个日志文件中。我需要过滤掉其中的每个字段。前任:

我已经尝试过这种模式,在 uid 之后(对于日志文件的第二行,我无法获得数字,即 uid:2)同样,对于第一行,我做了直到 Property: MatchResult,在 '(' 之后,我不能获取单独的字段。我是第一次这样做。如果需要更多信息,请告诉我。谢谢

0 投票
1 回答
292 浏览

regex - 回溯正则表达式实现的优化技术

我正在尝试基于Exploring Ruby's Regular Expression Algorithm中概述的回溯方法来实现正则表达式匹配器。编译后的正则表达式被翻译成一组虚拟机命令;用于回溯当前命令和输入字符串索引以及捕获组信息都保存在堆栈上。

正则表达式匹配:虚拟机方法中,Cox 提供了有关如何将某些正则表达式组件编译为 VM 命令的更详细信息,尽管讨论的实现有些不同。根据这些文章,我的实现对于标准分组、字符类和重复组件非常有效。

现在我想看看这种类型的实现有哪些扩展和优化选项。Cox 在他的文章中提供了很多关于 DFA/NFA 方法的有用信息,但是关于回溯方法的扩展或优化技术的信息有点少。

例如,关于他所说的反向引用

反向引用在回溯实现中是微不足道的。

并给出了 DFA 方法的想法。但我不清楚如何用 VM 方法“简单地”完成这项工作。当到达反向引用命令时,您必须将先前匹配的字符串从相应的组编译到另一个 VM 命令列表中,并以某种方式将这些命令合并到当前 VM 中,或者维护第二个 VM 并将执行临时切换到那个。

他还提到了通过使用前瞻对重复进行可能的优化,但没有详细说明它是如何工作的。在我看来,这可以用来减少回溯堆栈上的项目数。

tl;dr基于 VM 的回溯正则表达式实现存在哪些通用优化技术,它们是如何工作的?请注意,我不是在寻找特定于某种编程语言的优化,而是针对这种类型的正则表达式实现的一般技术。


编辑:正如第一个链接中提到的,Oniguruma 库实现了一个正则表达式匹配器,具有完全基于堆栈的回溯方法。也许有人可以解释该库所做的优化,这些优化可以推广到其他实现。不幸的是,该库似乎没有提供任何有关源代码的文档,而且代码也缺少注释。


编辑 2:在阅读有关解析表达式语法 (PEG) 的内容时,我偶然发现了一篇关于 Lua PEG 实现的论文,它使用了类似的基于 VM 的方法。该论文提到了几个优化选项,以减少执行的 VM 命令的数量和回溯堆栈的不必要增长。

0 投票
1 回答
718 浏览

regex - 正则表达式:匹配包含特殊字符的单词

我目前正在使用 oniguruma 正则表达式来搜索类似匹配的功能,但某些关键字除外。例如,在字符串“this is a test() and im() testing() thi[s]() this_[is]_a_fun(with,some,params)”中

正则表达式应该匹配: test, im, testing, thi[s] this_[is]_a_fun 我正在使用的当前正则表达式是

但这thi[s]与单词中包含括号的任何函数不匹配。

我尝试更新正则表达式以将这些模式与正则表达式匹配

但无济于事。

任何匹配这些模式的帮助将不胜感激

0 投票
2 回答
86 浏览

regex - 匹配以 '/' 开头的字符的所有实例

例如,我可能有字符串

我想匹配每个'e',但只能从短语“zombie nimble zombie quick”中匹配,因为它前面有一个正斜杠。

我可以很容易地用\/.*.
我还可以将正确字符串中的第一个“e”实例与\/.*?\Ke

但我想以一种对 VSCode 语法突出显示友好的方式匹配正确字符串中的每个 'e' 实例,这 afaik 是 .NET 风格

-果酱

0 投票
1 回答
70 浏览

regex - Oniguruma 正则表达式条件组捕获

我正在尝试function使用 Oniguruma 正则表达式(用于 VSCode 语法突出显示)将单词捕获到 2 个不同的组中,具体取决于::前面的字符。据我所知 Oniguruma 不支持条件,因此我认为如果字符不存在,我可以将正则表达式结果捕获到第 1 组,如果它们存在,我可以捕获到第 2 组

目前,我有以下内容:

一些文本来测试代码:

预期的正则表达式匹配

鉴于上面的文字组$1应该

另一方面,组 $2 应该

据我了解,以下内容应表示:“捕获并退出第 2 组单词functionif 前面有 :: else capture functionin group 1。” 并且根据 regex101.com 它应该可以工作:https://regex101.com/r/VtgeTD/1,但我的语法突出显示仍然失败。难道我做错了什么?