regex 正则表达式获取等号和文本之间出现的每个字符

yws3nbqq  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(140)

我想获取等号后面出现的所有文本/数字,以便此输入

"Input: m = 2, n = 3, indices = [[0,1],[1,1]]"

将返回以下输出:

[2,3, [[0,1],[1,1]] ]

这就是我所尝试的:

eachEx.match(/= (.+)/)[1]

然而,这会传回:

2, n = 3, indices = [[0,1],[1,1]]

我曾想过拆分字符串并遍历每个元素,然后将其传递给匹配项。然而,问题是,我将无法知道所讨论的元素是字符串、整数还是数组。我需要知道这些信息

huwehgph

huwehgph1#

如果你最终需要为此编写一个简单的解析器,而不是一个正则表达式,我不会感到惊讶。但是给出的具体例子 * 可以 * 用一个正则表达式完成。只是我怀疑当你抛出更多的例子时,它会变得太复杂。

如果使,成为23之后的分隔符而不是最终匹配中的分隔符的原因是最终匹配被 Package 在[___]中,则可以使用交替来调整捕获中允许的字符:

/= (\[[^=]+\]|[^=,]+)/

也就是说,如果文本以[开头,以]结尾,则匹配其中所有非=的内容,否则匹配所有非=和非,的内容。
然后,为了获得所有匹配项,添加一个g标志并使用matchAll,然后对从中获得的可迭代对象进行后处理以提取捕获组:

const eachEx = "Input: m = 2, n = 3, indices = [[0,1],[1,1]]";

const match = eachEx.matchAll(/= (\[[^=]+\]|[^=,]+)/g);
console.log(Array.from(match, ([, capture]) => capture));

作为一个字符串解析错误的例子,考虑"a = [3, [2, ], b = 3",它给出了数组[ "[3, [2, ]", "3" ],而它可能是一个错误:

const eachEx = "Input: a = [3, [2, ], b = 3";

const match = eachEx.matchAll(/= (\[[^=]+\]|[^=,]+)/g);
console.log(Array.from(match, ([, capture]) => capture));

因此,上面的警告提示您可能需要编写一个简单的解析器。

相关问题