我有一个字符串,其中包含一些 HTML 代码,例如:
This is <strong id="c1-id-8">some</strong> <em id="c1-id-9">text</em>
我需要删除 id
每个 HTML 标签的属性,但我对正则表达式的经验为零,所以我从互联网上到处搜索,然后写了这个模式:[\s]+id=\".*\"
不幸的是,它没有按照我的预期工作。事实上,我希望正则表达式能够捕获 id="
后跟重复任意次数的任意字符,并以最近的双引号终止;实际上,在这个例子中,我期望捕获 id="c1-id-8"
和id="c1-id-9"
。
但相反,该模式返回了子字符串 id="c1-id-8">some</strong> <em id="c1-id-9"
,它找到第一次出现 id="
以及最后一次出现的双引号字符。
您能告诉我我的模式有什么问题以及如何修复它吗? 非常感谢
最佳答案
正则表达式中的量词.*
是贪婪(意味着它尽可能匹配)。为了满足最低要求,您可以使用类似 /\s+id=\"[^\"]*\"/
的内容。方括号 []
表示字符类。因此它将匹配括号内的所有内容。字符类开头的克拉 [^]
是一个否定,意味着它将匹配 一切除了括号中指定的内容。
另一种方法是通过将 .*
量词更改为 .*?
来告诉其惰性,它将匹配尽可能少的内容可以。
关于regex - 如何使用正则表达式搜索双引号包围的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545756/