【发布时间】:2012-01-17 01:43:05
【问题描述】:
我正在使用以下正则表达式来替换字符串:
<\/?(span)\b(?:\s+class="highlight")?>
但是这个正则表达式有一个缺陷......以这个示例代码为例:
<p>
Some text here
<span class="highlight">This is highlighted</span>
<span>This is not highlighted</span>
</p>
我的正则表达式将匹配两个跨度标签,尽管我只想要一个设置了 class="highlight" 的标签。如何使用 RegEx 实现这一目标?
PS:请不要告诉我我不应该为此使用 RegEx,因为我会降低你的答案,因为它是题外话。这是 RegEx 人的问题。
编辑:根据下面接受的答案,我正在使用以下正则表达式进行替换 注意:代码在 javascript (mootools) 中
var regex = new RegExp("(<span[^>]+class\\s*=\\s*(\"|')highlight\\2[^>]*>)(.*?)(</span>)",'g');
var replaced = element.get('html').replace(regex, "$3");
element.set('html', replaced);
上面的正则表达式将这里的一些文本替换为“这里的一些文本”(不带双引号)
【问题讨论】:
-
您不使用正则表达式来处理 HTML。而且您不会告诉人们不要告诉您这一点,并威胁他们对他们的答案投反对票。
-
我不想要告诉我不应该使用正则表达式的答案,因为我想要一个带有正则表达式的解决方案,我在询问之前浏览了 stackoverflow,我看到了这样的答案来解决人们想要正则表达式解决方案的问题...所以我必须在某个聪明人来回答诸如“不要使用正则表达式解析 html”之类的问题之前声明,这显然对社区没有任何帮助。因此,如果您没有正则表达式的答案,那么我对您的解决方案不感兴趣。如果你这样做,我会投票并接受你的回答。
-
对不起,我不同意。一方面,我不认为你问这个问题是为了“帮助社区”,所以这甚至不是一个论点。接下来,正则表达式不是解决您的问题的正确工具,显然您知道这一点。争吵不会改变这个事实。如果你要问这样一个问题,你将不得不面对人们会告诉你这个事实。如果人们停止为 HTML 问题提出具有固有缺陷的正则表达式解决方案,这将对“社区”有更大的帮助,因为只要你坚持足够长的时间,它就可以奏效。
-
(这让我问:为什么除了正则表达式之外还有其他解决方案?)
-
您还有哪些其他解决方案?
标签: javascript regex mootools