匹配每个字符,直到在行首出现模式(JavaScript)

match every character until a pattern occurs in the beginning of the line (javascript)

本文关键字:行首 模式 JavaScript 字符      更新时间:2023-09-26

我有这样的文字:

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

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

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

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

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

(?:([^]*)....

通过"匹配每个字符,直到'<'出现在行首的东西(这是因为在我正在解析的文本中,标签内不能有标签),所以我认为这会很好......但我似乎找不到该:(的正则表达式

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

我建议你通过程序解析它:

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