使用JavaScriptRegExp匹配由括号包围的列表中的第一项

Using JavaScript RegExp to match the first item in a list surrounded by parentheses

本文关键字:一项 列表 使用 包围 JavaScriptRegExp      更新时间:2023-09-26

我有一个文本字符串,我正试图用JavaScript中的RegExp进行解析。假设它看起来像这样:

var myString = "This is a string of text (item item item) and more text here.";

我需要匹配单词"item"的第一个出现,因为它是括号内的第一个项目。我不知道如何写出一个只匹配括号内第一项的模式。

你们中的一些人可能想这样想:假设我正在解析一个Lisp字符串,并想匹配所有的汽车。

提前谢谢。

如果可以避免检查左括号,可以对右括号使用先行检查。

item(?=[^')]*'))

您还可以将捕获组与一起使用

'(.*?(item).*?')

编辑

对于在括号中某个地方重复至少一次的单词:

'(.*?('b'w+'b).*?'1.*?')

编辑2

对于括号中的第一组字母数字字符:

'([^'w]*('b'w+'b).*?')

或者一个更简单的替代方案:

'(.*?'b('w+)'b.*?')

使用类似的东西:

/'(('w*?)(?:'s|'))/

现场示例:http://tinkerbin.com/EJyjEX30(点击run运行代码))

您不能创建与左括号不匹配的模式,因为Javascript正则表达式不支持回溯。

你可能需要更新你的lexer代码来理解捕获组(或通用函数或其他方便的东西…),或者你需要重组你的代码,这样它就可以处理你无法摆脱的额外paren。