我是使用这个 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
元素。
最佳答案
首先,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
修饰符来捕获所有匹配项。您还可以匹配所有标签,然后在迭代它们时决定保留哪些标签,不保留哪些标签。
关于javascript - 为什么表达匹配整个句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42256445/