一个Regex Multiple结果

时间:2018-02-06 16:23:57

标签: regex match

抱歉我的英语不好。 我有一个如下文

的文字
<title class="a" />
<li name="a1" src="a11" />
<li name="a2" src="a21" />
<li name="a3" src="a31" />
<title class="b" />
<li name="b1" src="b11" />
<li name="b2" src="b21" />
<title class="c" />
<li name="c1" src="c11" />
<li name="c2" src="c21" />
<li name="c3" src="c31" />
<li name="c4" src="c41" />
<li name="c5" src="c51" />

我希望获得所有标题类名称和子li(没有特定的子li计数)名称和src值。

非常感谢。

1 个答案:

答案 0 :(得分:0)

抓住头衔和孩子李:

/<title.*?class=(['"])(.*?)\1 \/>(?:\n<li.*(?:name=(["']).*?\3.*|src=(['"]).*\4.*){2})+/g

从中获取li:

/(?:\n<li.*name=(["'])(.*?)\1.*src=(['"])(.*?)\3.*?)/g

请注意,这被视为不良做法,you probably shouldn't parse html with regex

let titleAndListElementsRegex = /<title.*?class=(['"])(.*?)\1 \/>(?:\n<li.*(?:name=(["']).*?\3.*|src=(['"]).*\4.*){2})+/g,
  listElementRegex = /(?:\n<li.*name=(["'])(.*?)\1.*src=(['"])(.*?)\3.*?)/g,
  page = `<title class="a" />
<li name="a1" src="a11" />
<li name="a2" src="a21" />
<li name="a3" src="a31" />
<title class="b" />
<li name="b1" src="b11" />
<li name="b2" src="b21" />
<title class="c" />
<li name="c1" src="c11" />
<li name="c2" src="c21" />
<li name="c3" src="c31" />
<li name="c4" src="c41" />
<li name="c5" src="c51" />`,
  pageJson = {};

do {
  titleMatch = titleAndListElementsRegex.exec(page);
  if (titleMatch) {
    pageJson[titleMatch[2]] = {}
    do {
      listItemMatch = listElementRegex.exec(titleMatch[0]);
      
      if (listItemMatch) {
        pageJson[titleMatch[2]][listItemMatch[2]] = listItemMatch[4]
      }
    } while (listItemMatch);
  }
} while (titleMatch);

console.log(pageJson)