问题标签 [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 回答
518 浏览

regex - Oniguruma Regex - 匹配整个组的内容,而不仅仅是最后一次出现

我正在为 Sublime Text 编辑器(使用 Oniguruma 正则表达式定义)编写语法荧光笔。基本上,我有这样的事情:

正则表达式: \((\w+\s*)*\)

测试: (how are you)

捕获组: 1. you

我的问题是,只有捕获组中的最后一次匹配(因此突出显示)而不是捕获组的全部内容。

在我的具体情况下:

正则表达式: \(\w+(\s+(\?\w+\s+)+-\s+(\w+))*\)

测试: (at ?l - location ?x - object)

捕获组:

但是,我想匹配整个组的内容,如下所示:

0 投票
1 回答
583 浏览

regex - TextMate 中的正则表达式问题

正则表达式对我来说是新的(但它们很棒而且很有用:D)。但是,在尝试在 TextMate 中使用它们之后,我得到了意想不到的结果。我不确定这是否是一个错误,或者这就是正则表达式的工作方式。

我有这个代码

搜索begin.+end我会期待两个结果

  1. begin text in the middle end
  2. begin second text in the middle end

但是我选择了整个文本;我希望begin.+end搜索.+直到end找到第一个,但它会搜索到最后一个。

他们是这样工作的吗?我在哪里可以学习如何使用正则表达式?

事实是我只对选择内部.+不感兴趣beginend但这是另一个问题。

0 投票
1 回答
128 浏览

regex - TextMate 编辑 Latex Bundle Snippet,正则表达式替换非 ascii 字符

我正在尝试从 LaTeX Bundle 中的 TextMate 片段修改代码。这是代码:

我希望它也将 unicode 重音字符更改为非重音字符,例如:

a进入a

é进入e

í进入i

ó进入o

ú进入u

ñ进入n

这就是它的作用:

这就是我想要它做的,因为乳胶标签不支持这些字符:

0 投票
2 回答
808 浏览

ruby - 等价于 Vim 的正则表达式开始和结束匹配(`\zs` 和 `\ze`)?

如果我只想用 Atom 中的其他内容替换匹配的一部分,我该怎么做?

Ruby 正则表达式解决方案可能会起作用,因为 Ruby 使用的正则表达式引擎非常类似于 Oniguruma(由 Atom 使用)。

我找到了一本Oniguruma 手册,上面写着\G设置比赛开始位置,但这对我不起作用。

0 投票
2 回答
75 浏览

regex - 如何将自己的语法添加到 Sublime Text 2

我想将我自己的语法(语言)添加到 Sublime Text 2。我已经知道如何将它包含到语法列表中,所以我现在唯一的问题是语法突出显示。但首先我想了解用于匹配我想要突出显示的单词的Oniguruma语言,这样我就可以自己制作东西了。

这是我的代码

就像其他编程语言(例如 HTML 或 XML)一样,<>我将使用(在 HTML 中)[]而不是使用/for 来关闭语句。所以基本上我只是将它们替换<>为,[]但我怎样才能将它翻译成Oniguruma(正则表达式)?


这就是我想要的

0 投票
2 回答
851 浏览

regex - 如何使用正则表达式捕获每行的第 n 个模式?

背景:

对于 Sublime Text 中的语法高亮,
您可以编写一个tmLanguage带有相应文件的tmTheme文件。

tmLanguage文件包含您为其命名的正则表达式,
然后该tmTheme文件使用这些名称来设置捕获的内容的样式。

我想根据之前出现的重复图案的数量对相同的图案进行不同的着色。或者,换一种说法,我想以不同的方式设置每行上每个模式的第 n 个匹配项。

问题:

例如,
如何编写 3 个正则表达式来匹配以下粗体组?

<foo> <bar><baz>
<foo> <bar> <baz>
<foo><bar> <baz>

任何东西都可以在 < > 里面。

表达式 1 将捕获表达式的第一个实例<*.?>
2 将捕获表达式的第二个实例<*.?>
3 将捕获的第三个实例<*.?>

假设上面的三个例子实际上是同一行。
我的目标是让每个组都有不同的颜色

正则表达式语言是Oniguruma


到目前为止我的尝试:

我可以像这样捕获第一组:

我不知道如何只捕获第二组

0 投票
1 回答
730 浏览

regex - 获取模式中的第一个单词(在 SublimeText 上使用 oniguruma)

当试图在 SublimeText 上定义一种扩展 HTML 的新语言时,我似乎无法找到正确的语法来获取模式中的第一个单词。

我的目标是何时出现:

“某物”这个词将有不同的范围。

我在 tmLanguage 文件中的模式定义如下:

我尝试添加以下模式,但没有任何运气:

0 投票
0 回答
69 浏览

regex - 匹配特定字符集后面的 2 个字符,但不匹配该集中的任何字符

我正在改进 Sublime Text 中的 Github-Flavored Markdown 语法突出显示,它使用 Oniguruma 正则表达式引擎。具体来说,我正在尝试改进**bold**/__bold__部分的匹配。由于在.tmLanguageXML 文件中使用正则表达式是一个 PITA,我正在使用PackageDev它的.YAML-tmLanguage格式。这是原始的正则表达式:

这是一个例子

这在普通句子中效果很好:

但当粗体文本紧跟在圆括号、方括号或大括号之前时:

例子

所以,我想我会添加(,[{到第一组:

但这发生 - 括号/括号/大括号匹配,导致突出显示问题:

当前行为:

当前的

使用新的正则表达式:

新的

如您所见,开头的括号在不应该的时候被突出显示。

所以,我的问题是:我应该如何改变事情,以便不突出显示开头的括号,但所需的文本是?

0 投票
2 回答
360 浏览

regex - 如果前面没有一个组,则尝试匹配一个序列,但如果前面有另一个则是

这有点元,但我试图找出一个正则表达式来匹配正则表达式以用于语法突出显示。有一个很长的背景故事,但为了简洁起见,我将跳过它。这就是我想要做的:我需要匹配一个注释(#在行尾之前并在行尾终止)只有当它不在字符类([...])内时才需要匹配,尽管如果有一个完整的(已关闭)行中较早的字符类。

[复杂的因素是转义方括号 - 而行中前面没有后跟关闭的纯文本]表示我们仍在字符类中,因此是非法的,\[可能存在转义括号,无论是否存在关闭转义括号\]

也许一些例子会有所帮助。以下是一些匹配注释的情况:

  • (\h{8}-\h{4}-\h{4}-\h{4}-\h{12}) # match UUID(根本没有方括号)
  • ([A-Za-z_][A-Za-z0-9_]*) # valid Python identifier(成对的非转义方括号)
  • (\||\[|\?) # match some stuff(转义的左方括号)

以下是不应匹配“尝试的评论”的示例:

(第一行不应该匹配,第二行就可以了)

我绝不是一个正则表达式大师(这就是我问这个问题的原因!),但我尝试过摆弄正面和负面的lookbehinds,并尝试嵌套它们,但我的运气为零,除了

仅当前面没有方括号时才匹配注释。但是,一旦我开始嵌套环视,并尝试匹配开瓶器之前是否有转义,我就被难住了。任何帮助都会......有帮助。

0 投票
1 回答
146 浏览

ruby - Oniguruma 正则表达式引擎中的命名子程序?

在 Perl 中,您可以这样做:

在 Ruby(Oniguruma 引擎)中,似乎(?(DEFINE...不支持该语法。此外,(?&...变成\g. 所以,你可以这样做:

但当然,这不等同于我上面给出的 Perl 示例,因为第一个(?<animal>dog|cat)没有被忽略,因为没有类似(?(DEFINE....

如果我想用一堆命名的子例程定义一个大的正则表达式,那么我曾经在 Perl 中可以做的事情就不能这样完成了。

看起来我可以通过做这样的事情来破解一个非常尴尬的解决方案:

但是,这是相当骇人听闻的。有一个更好的方法吗?Oniguruma 是否支持定义命名子例程而不必先尝试“匹配”它们的方法?

或者,如果有办法让真正的 PCRE 在 Ruby 中工作,?(DEFINE...(?&...也会接受。

谢谢!