匹配每个字符,直到在行的开头出现一个模式(javascript)

时间:2016-02-17 22:39:26

标签: javascript regex

我有这样的文字:

destinationImageData

我想匹配标签名称及其内容:因此我使用的程序匹配:

<a>
    a lot of text here with all types of symbols ! : . %& < >
</a>

<a>
    another text here with all types of symbols ! : . %& < >
</a>

注意:我最后使用条件组,因为它可以省略,例如。

<([^]*?)>(?:([^]*)<\/\1>)?

但我的问题是正则表达式尝试使用每个字符,因此它打开并关闭选项卡,选项卡的内容变为:

<a>

<a>
    another text here with all types of symbols ! : . %& < >
</a>

当我想检测两个匹配时,一个是隔离的标签,另一个是多线标签。

注意2:这不是HTML或XML,所以我不需要像明智一样解析它。 注3:我的意思是取代正则表达式部分:

<a>
    another text here with all types of symbols ! : . %& < >

通过与每个角色匹配的内容直到&#39;&lt;&#39;出现在行的开头(这是因为在文本中我解析不能在标签内部标记)所以我认为那会很好..但我似乎无法找到一个正则表达式:(

2 个答案:

答案 0 :(得分:0)

我建议你按程序解析它:

  1. 匹配任何开始标记的第一个匹配项: <([a-z0-9]+)> 有了这个,您就可以获得标记的名称。
  2. 获取任何开始标记的第二次出现位置以及结束标记第一次出现的位置,其名称与之前读取的名称相同。
  3. 比较这些位置,并确定它是单线刚打开标签还是多线打开和关闭标签。
  4. 获取第一个开始标记与步骤2中获得的最低位置之间的内容。

答案 1 :(得分:0)

我认为你想要的是/<([a-z0-9-]+)>([^]*?)(?:(<\/\1>)|$|(?=(?:<[a-zA-Z0-9\-]+>)))/gi