3

我的项目中有 500 个 HTML 文件,其中属性中的大小写和引号("')在<title>所有页面上都不同,请参见下面的几个示例

<button title="Next" id="next"> Next</button>
<button title="next"> Next </buton>
<button title=""please go back">Check</button> 

我想更改标题案例中的所有标题属性

<button title="Next" id="next"> Next</button>
<button title="Next"> Next </buton>
<button title="Please Go Back">Check</button>#

我试图查找和替换 - 启用正则表达式和区分大小写的按钮

查找内容: title=(".*")\s
替换为: title="\u$"

但没有成功。请告诉我我做错了什么?

更新:还想删除额外的' "请参阅#

4

2 回答 2

4

为了进一步发表我的评论,首先.*是“贪婪”而不是“懒惰”的问题,这意味着它尽可能匹配(即Next"> Next</button><button title="Next在您的示例中)。

快速解决方法是使用“懒惰” .*,也就是.*?(我添加了一个?来表示可能存在空间,因为您的示例中没有空间):

title=(".*?")\s?

为了提高性能,您将使用否定类:

title=("[^"]+")\s?

where[^"]+匹配除 . 之外的任何字符"

为了应对不同的报价,您可以使用:

title=("[^"]+"|'[^']+')\s?

这基本上意味着括号内的部分"[^"]+"或部分。'[^']+'


对于替换和连续引号问题:

title=(?:"+([^"]+)"+|'+([^']+)'+)\s?

用。。。来代替:

title="\u$1$2"

唯一的事情是最后一行将是<button title="Please go back">Check</button>,如果这不是问题......

编辑:\G实际上有效。使用第二个替换:

(?:(?<=title=")|(?<!^)\G)[^\s"]+\s?

用。。。来代替:

\u$0
于 2013-10-07T09:20:14.747 回答
1
(?<=title=('|")).+?(?=('|"))

这应该为您提供Next next please go back可以使用的匹配项。

如果你想提高你的下限,你可以使用匹配的索引在原始字符串中找到你的匹配项。

或用于 title=('|").+?(\1)在您的 tekst 中查找任何标题属性,包括引号

于 2013-10-07T09:26:23.597 回答