我如何创建一个正则表达式来匹配最内部的匹配或从右到左的工作



我试图匹配图像引用的字符串,但是当有一个表达式涉及到的时候,我拿起有点太多了。在这个例子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

http://regexr.com/3b3uk

("|')(.*?.svg)1

1是一个反向引用,它指向第一个捕获的组(双引号或单引号)。http://www.regular-expressions.info/backref.html

相关内容

  • 没有找到相关文章

最新更新