相关疑难解决方法(0)

如何在JavaScript正则表达式中访问匹配的组?

我想使用正则表达式匹配字符串的一部分,然后访问该带括号的子字符串:

var myString = "something format_abc"; // I want "abc"

var arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString);

console.log(arr);     // Prints: [" format_abc", "abc"] .. so far so good.
console.log(arr[1]);  // Prints: undefined  (???)
console.log(arr[0]);  // Prints: format_undefined (!!!)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?


我发现有什么不对上述正则表达式代码:实际的字符串,我反对是这样的测试:

"date format_%A"
Run Code Online (Sandbox Code Playgroud)

报告"%A"未定义似乎是一种非常奇怪的行为,但它与此问题没有直接关系,所以我开了一个新的,为什么匹配的子字符串在JavaScript中返回"undefined"?.


问题是console.log它的参数就像一个printf语句,因为我正在记录的字符串("%A")有一个特殊的值,它试图找到下一个参数的值.

javascript regex

1277
推荐指数
14
解决办法
72万
查看次数

C++ 正则表达式:获取 SubMatch 匹配的捕获组的索引

语境。我正在开发一个 Lexer/Tokenizing 引擎,它将使用正则表达式作为后端。词法分析器接受定义令牌类型/ID 的规则,例如

<identifier> = "\\b\\w+\\b"

正如我所设想的,为了进行基于正则表达式匹配的标记化,正则表达式定义的所有规则都包含在捕获组中,并且所有组都由 OR 分隔。

当执行匹配时,我们生成的每个匹配都必须有一个与其匹配的捕获组的索引。我们使用这些 ID 将匹配映射到令牌类型。

那么这个问题的问题就出现了——如何获取群组的ID

这里有类似的问题,但它没有为我的具体问题提供解决方案。

正是我的问题,但它是在 JS 中,我需要一个 C/C++ 解决方案。

假设我有一个正则表达式,由用 OR 分隔的捕获组组成:

(\\b[a-zA-Z]+\\b)|(\\b\\d+\\b)

它匹配整数或字母单词。

我的问题要求可以知道正则表达式子匹配匹配的捕获组的索引,例如在匹配字符串时

foo bar 123

将进行 3 次迭代。每次迭代的匹配项的组索引将为0 0 1,因为前两个匹配项与第一个捕获组匹配,最后一个匹配项与第二个捕获组匹配。

我知道在标准std::regex库中这并不完全可能(regex_token_iterator不是解决方案,因为我不需要跳过任何匹配)。

boost::regex我对PCRE 正则表达式库了解不多。

完成这项任务的最佳方法是什么?使用哪个库和方法?

c++ regex tokenize lexer capturing-group

5
推荐指数
1
解决办法
2190
查看次数

标签 统计

regex ×2

c++ ×1

capturing-group ×1

javascript ×1

lexer ×1

tokenize ×1