正则表达式,以获得最后的重复

时间:2014-11-13 21:50:01

标签: javascript regex

我有以下两个字符串。在这两种情况下,我都试图检索“foreclosure_defenses”。

str = "client_profile[lead_profile_attributes][foreclosure_defenses_attributes][0][own_property]"
str2 = "client_profile[foreclosure_defenses_attributes][0][own_property]"

我很接近,但我无法获得适用于他们两个的正则表达式。

这个正则表达式适用于str2,但不适用于str:

regex = /\w+(?:\[(\w+)_attributes\]+)\[\d+\]\[own_property\]/g 
regex.exec(str2)
["client_profile[foreclosure_defenses_attributes][0][own_property]", "foreclosure_defenses"]

这个正则表达式适用于str,但不适用于str2:

regex = /\w+(?:\[(\w+)_attributes\]?)+\[\d+\]\[own_property\]/g
regex.exec(str);
["client_profile[lead_profile_attributes][foreclosure_defenses_attributes][0][own_property]", "foreclosure_defenses"]

最后一个应该适用于两种情况,但不适用。它应该寻找一个或多个_attributes模式并抓住最后一个。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

我想你想要

/\w+(?:\[(\w+)_attributes\])+\[\d+\]\[own_property\]/

请注意,如果您使用全局g标志并尝试匹配多个字符串,则需要重置正则表达式的索引。

答案 1 :(得分:0)

为什么不使用它:

/.+?\[(foreclosure_defenses)_attributes\]/g

Demo