使用JavaScriptRegExp匹配由括号包围的列表中的第一项
Using JavaScript RegExp to match the first item in a list surrounded by parentheses
我有一个文本字符串,我正试图用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。
相关文章:
- 如何从对象数组中获取最后一项
- 为什么只有最后一项显示,而不是全部显示
- 删除最后一项jquery
- $q.all当输入数组中的一项不是promise时,Typescript检查器失败
- 为什么我的“for”循环只获取 html 中的最后一项
- 我无法将下拉列表的默认值设置为最后一项
- 流星批量插入仅插入最后一项
- 我怎么能知道元素是最后一项
- 如何删除WinJS组绑定列表的最后一项
- 在immutable.js中更改列表中的一项
- 使用handlers.js模板以数组中的最后一项为条件
- AngularJs ng显示当列表中的某一项在一行中为true时
- node.js:将一个异步函数列表应用于列表列表中的每一项
- 将innerHTML从列表中的一项复制到元素的内容中
- 如何使用Angular.js获得多选择数据,并在列表的每一项中添加复选框
- 不能让.offset()方法在迭代一组列表项时工作
- 删除列表中的最后一项
- 用生成器异步调用列表的每一项
- 将属性移动到列表中的上一项
- 样式提要条目列表中的最后一项(googlefeedApi)