用于在表字符串中查找字符串的正则表达式

时间:2014-03-14 17:05:23

标签: regex

我有这个字符串,我希望找到上一个</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}}

谢谢。

4 个答案:

答案 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>