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

使用JavaScript RegExp匹配由括号包围的列表中的第一项,javascript,regex,Javascript,Regex,我试图用JavaScript中的RegExp解析一个文本字符串。假设它看起来像这样: var myString = "This is a string of text (item item item) and more text here."; /\((\w*?)(?:\s|\))/ 我需要匹配单词“item”的第一个匹配项,因为它是括号内的第一个项目。我不知道如何编写一个模式,只匹配一组括号内的第一项 你们中的一些人可能会这样想:假设我正在解析一个Lisp字符串,并希望匹配所有汽车 提前感

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

var myString = "This is a string of text (item item item) and more text here.";
/\((\w*?)(?:\s|\))/
我需要匹配单词“
item
”的第一个匹配项,因为它是括号内的第一个项目。我不知道如何编写一个模式,只匹配一组括号内的第一项

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


提前感谢。

请使用以下内容:

var myString = "This is a string of text (item item item) and more text here.";
/\((\w*?)(?:\s|\))/

活示例:(单击run运行代码))

如果可以避免检查左括号,则可以对右括号进行前瞻

item(?=[^\)]*\))
您还可以将捕获组用于:

\(.*?(item).*?\)
编辑

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

\(.*?(\b\w+\b).*?\1.*?\)
编辑2

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

\([^\w]*(\b\w+\b).*?\)
或者更简单的选择:

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

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


您可能需要更新lexer代码以了解捕获组(或通用函数或其他方便的功能…),或者您需要重新构造代码,以便它能够处理无法摆脱的额外部分。

当字符串为
”时失败(项)“
这确实有帮助,但问题是我正在尝试为别人创建的lexer制作一个插件。除非我能让模式只返回捕获组,否则我会被卡住,因为我没有办法告诉lexer使用捕获组而不是实际匹配。请查看如何获取第一个组的实时示例:
myStr.match(/\(\w*?)(?:\s\)/)[1]
只要我访问捕获组,这两个答案都有效,但问题是在这种情况下,我没有这个答案。我想如果是这样的话,这可能是不可能的?你是在寻找幕后黑手<代码>(?这几乎就是我所需要的。问题是括号中的单词实际上不是“item”。它们将是我事先不知道的字母字符串。你会寻找一直重复的第一个单词吗?不,第一个单词不太可能重复,但可能是。哦……所以你只需要()是的,我想是的。