正则表达式找到两个通配符,替换其中一个 - TextMate

时间:2014-09-05 05:41:44

标签: regex textmate

我需要在几十个不同的html文档中找到并替换成千上万的目标URL(ahrefs)...所有的ahref格式都不同。我需要用一个统一的目标网址替换所有各种目标网址。

有两个障碍:

  1. 我不想搞砸了链接参数,因为css文件引用等等。只是改变了实际的ahrefs
  2. 2.在这些文件中,ahrefs没有统一的结构。有些在a和href之间有class = stuff。例子包括:

     <a class='image' href="examplelinkone.com">
    <a class='image ' href="examplelinkone.com"> ( space between e and ' )
    <a class='someotherclass' href="examplelinktwo.com"
    

    当我像这样使用正则表达式时,我可以成功找到所有ahrefs的实例......

    <a[^<>]+href="[^<>]+"
    

    ...但是我无法弄清楚如何只更换href = part的双引号之间的内容,并且单独留下a和href之间的任何内容

2 个答案:

答案 0 :(得分:0)

您需要使用捕获组。

(<a[^<>]+href=")[^<>]+(")

在替换部分中,您需要这样做,

$1replacement-string$2

$1表示我们正在反向引用组索引1(<a[^<>]+href=")中存在的字符。接下来是双引号内的部分。这部分被替换为您替换字符串的字符串。最后,第二个被捕获的组被反向引用以获得最后一个"符号。

答案 1 :(得分:0)

与此模式类似的内容应该可以消除href=的引号之间的任何内容:

\b(href=\W)[\w\s.]+(?=\W)\b

替换为:

$1

- 在TextMate中测试:

 <a class="image" href="examplelinkone.com">anything<a href="more">
<a class='image ' href='examplelinkone.com'> ( space between e and ' )"<something>"All ok"</a>
<a class='someotherclass' href="examplelinktwo.com"

结果:

 <a class="image" href="">anything<a href="">
<a class='image ' href=''> ( space between e and ' )"<something>"All ok"</a>
<a class='someotherclass' href=""