我有这个字符串,我希望找到上一个</tr>
和</tbody>
之间的基本{{/tbody}}
<table><tbody>{{tbody}}<tr><td></td></tr>{{tr}}<tr><td></td></tr>{{/tbody}}</tbody></table>
如果我使用 /<\/tr>(.*?)<\/tbody>/ig
,则会给我 {{/tbody}
} 和
{{tr}}<tr><td></td></tr>{{/tbody}}
(第一个</tr>
和</tbody>
之间的值。)
请您告诉我如何才能获得{{/tbody}}
?
谢谢。
答案 0 :(得分:0)
这是一个更好的解决方案:
var str="<table><tbody>{{tbody}}<tr><td></td></tr>{{tr}}<tr><td></td></tr>{{/tbody}}</tbody></table>";
var startIndex=str.lastIndexOf("</tr>")+5;
var endIndex=str.indexOf("</tbody>",startIndex);
alert(str.slice(startIndex,endIndex));
这不是正则表达式,但性能明智,这是更好的解决方案。
答案 1 :(得分:0)
不确定它是否是最好的但是
<\/tr>(?!.*<\/tr>)(.*?)<\/tbody>
答案 2 :(得分:0)
如果它位于最后一个/ tr和/ t体之间,你可以期待任何字符,但是开始和结束标记:
/\<\/tr\>([\w\d\{\}\/]*?)\<\/tbody\>/ig
答案 3 :(得分:0)
不知道你正在使用什么引擎,但它基本上是这样做的。
# (?s)</tr>((?:(?!</tr>).)*)</tbody>
(?s) # Dot-All
</tr>
( # (1 start)
(?:
(?! </tr> ) # Lookahead, not '</tr>'
.
)*
) # (1 end)
</tbody>