最长字符串A RegExp从开始,后续但不包括B找到

时间:2011-03-23 03:30:29

标签: javascript regex

我没有制定RegExp发现

  • 最长的
  • 从开始不是空的序列,即
  • 可能后跟“<%”或“%>”或换行符,但不包括任何换行符。

我尝试了/^.+?(?=\r?\n|\r|<%|%>)?/,但它始终只匹配第一个字符。

E.g。 e = /^.+?(?=\r?\n|\r|<%|%>)?/.exec("test\nabc")找到e[0] = "t"

原因是,可以使用/\r?\n|\r|<%|%>/进行点击,但也许你们中的一个人知道更好的方法。

2 个答案:

答案 0 :(得分:1)

你的模式非常接近。 ^.+?是懒惰的,它与它的匹配程度相同。 (?=\r?\n|\r|<%|%>)?是可选的,它永远不必回溯 - 在单个字符后满足正则表达式。删除?会有更好的结果,但它不会处理没有停用词的单行文本。
一种更简单的方法是使用/m标志,这使$匹配字符串的结尾或行的结尾:

/^.*?(?=$|<%|%>)/m

我还将+更改为* - 它应该处理空行或以<%%>开头的行。

工作示例:http://rubular.com/r/l8Gmhc459i

答案 1 :(得分:0)

如果我正确理解你的问题,那么这个应该可以解决问题:

var re = /^(?:(?![\r\n]|<%|%>).)+/;