我试图匹配图像引用的字符串,但是当有一个表达式涉及到的时候,我拿起有点太多了。在这个例子http://www.regexr.com/3b3ub中,你会看到我在第一场和第三场比赛中做得很好,但在第二场比赛中我得到了太多。我只想要'images/md-icons/ic_notifications_24px.svg'
,但实际上也得到了"{{ vm.actions.length ?
。
是否有一些否定或限定符,我可以使用非贪婪,最内部的匹配?
这里有几件事:
- 正如@chris85所指出的,您希望匹配与开始引用相对应的only类型的结束引号。克里斯的例子是
("|')
,这绝对有效-但你的["']
的原始工作将很好,以及只要你在括号中框架,(["'])
,所以最后的1
可以参考它。 - 你的问题特别提到了一个"非贪婪"修饰符。regex术语是"懒惰的",它绝对存在:
?
。把它放在.*
后面。 - 星号在
.*
匹配零或多次-但我不认为你会想要找到一个例子,它是零长度(这将只是".svg")。这是个人偏好的问题,但我建议将其更改为+
(匹配一次或多次)。 - 在您的示例regex中,字符".svg"中的点不是查找文字点,而是任何字符(因此"xsvg"也将是匹配)。您需要用反斜杠转义它,使其成为一个文字点:
.svg
。
你想要的正则表达式是:(["'])(.*?.svg)1
链接:http://www.regexr.com/3b3uq
我看到当我在打字的时候,Chris做了一些编辑,内容和我一样。
您可以使用
隔离您想要的信息["'](imagesS+.svg)['"]
或
["'](S+.svg)['"]
第一个解决方案查看'imagesanything-but-a-non- whitspace .svg',而第二个解决方案查看'anything-but-a-non- whitspace .svg'。
你应该匹配相同的引号。
("|')(.*.svg)1
http://regexr.com/3b3uh 当前你说双引号或单引号,然后再一次。你需要匹配第一个引号的类型。
你可能应该在svg之前转义.
,使其成为文字,并检查第一个.svg
。
("|')(.*?.svg)1
1
是一个反向引用,它指向第一个捕获的组(双引号或单引号)。http://www.regular-expressions.info/backref.html