为什么表达式匹配整句

时间:2017-02-15 17:37:42

标签: javascript regex

我是使用此website进行正则表达的新手,但遇到了问题。场景是尖括号中有一些元素,每个元素都有一个属性。在每个元素之后,给出一个句点(.)符号。

<a value = "GoodVal">.<b value = "BadVal" size = "10">.<c height = "auto">.<d size = "3">.<e strength = "200%">.<f a1 = "1" a2 = "2" a3 = "3"></f></e></d></c></b></a>

我的表达是:<a.*?>\.<b.*?>\.<d.*?>,但为什么它被认为是匹配的。在b element c element之后的句子中,不是d元素。

1 个答案:

答案 0 :(得分:1)

首先,please see here for why not to use regular expressions to parse XML/HTML.

但是仍然回答你的问题:.匹配(差不多)任何字符(但默认情况下不使用适当的修饰符换行),这就是.*匹配之间所有内容的原因关闭b元素的括号和d元素的起始括号。

使用像http://www.regextester.com/?fam=96920这样的页面来表达您的表达式总是一个好主意,特别是如果您不熟悉使用RegEx。

要仅根据您的要求包含a,b和d的标记,您可以使用此正则表达式:

/<[abd].*?\./g

另见regextester。 JavaScript中需要g修饰符来捕获所有匹配项。您也可以匹配所有标签,然后在迭代它们时,决定要保留哪些标签以及不保留哪些标签。