正则表达式匹配html属性中的空格

时间:2009-05-14 09:14:23

标签: html regex replace textmate

我有一堆像这样的行的HTML:

<a href="#" rel="this is a test">

我需要用下划线替换rel-attribute中的空格,但我有点像一个正则表达式!

我正在使用Textmate。

任何人都可以帮助我吗?

/雅各布

6 个答案:

答案 0 :(得分:0)

假设您已收到rel:

的值
var value = document.getElementById(id).getAttribute( "rel");
var rel = (new String( value)).replace( /\s/g,"_");
document.getElementById(id).setAttribute( "rel", rel);

答案 1 :(得分:0)

我认为你不能正确地做到这一点。虽然我想知道为什么你需要一次性去做?

我可以想到一种非常糟糕的做法,但即使我不推荐它,也就是这样:

您可以使用下面的正则表达式来完成它。但是,您必须增加捕获和输出的数量,并使用_结尾的可能空间数量。我敢打赌,这是一个不允许这种解决方案的要求。

搜索:

{\<a *href\=\"[^\"]*" *rel\=\"}{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*

替换:

\1\2_\3_\4_\5_\6_\7_\8_

这种方式有两个缺点,一个是你可以在Textmate中捕获的数量有限制,两个是你最终会在每一行的末尾有大量的_。

根据您当前的测试,使用上面的正则表达式,您最终会得到:

<a href="#" rel="this_is_a_test">____

PS:此正则表达式是visual studio搜索/替换框的格式。你可能需要更改一些字符以使其适合textpad。

 {} => capturing group

  () => grouping

  [^A] => anything but A

  ( |\")* => space or "

  \1 => is the first capture 

答案 2 :(得分:0)

正则表达式在解析HTML方面根本不好(请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解原因)。你需要的是一个HTML解析器。有关使用各种解析器的示例,请参阅Can you provide an example of parsing HTML with your favorite parser?

答案 3 :(得分:0)

我必须在这里登上“你正在使用错误的工具”。你有Textmate,所以这意味着OSX,这意味着你有sed,awk,ruby和perl,这些都可以做得更好更容易。

学习如何使用其中一种工具进行文本操作将在未来为您带来无可比拟的好处。这是一个可以让您轻松进入sed的网址:http://www.grymoire.com/Unix/Sed.html

答案 4 :(得分:0)

查找:(rel="[^\s"]*)\s([^"]*")

替换:\1_\2

这只取代了第一个空格,因此点击&#34;全部替换&#34;直到什么都没有被替换。它并不漂亮,但易于理解并适用于每个编辑。

如果您需要清除其他属性,请在查找模式中更改rel

答案 5 :(得分:-1)

如果你正在使用TextMate,那么你就是在Mac上,因此拥有Python。

试试这个:

#!/usr/bin/env python

import re

input = open('test.html', 'r')

p_spaces = re.compile(r'^.*rel="[^"]+".*$')

for line in input:
    matches = p_spaces.findall(line)

    for match in matches:
        new_rel = match.replace(' ', '_')
        line = line.replace(match, new_rel)

    print line,

示例输出:

 $ cat test.html
testing, testing, 1, 2, 3
<a href="#" rel="this is a test">
<unrelated line>
Stuff
<a href="#" rel="this is not a test">
<a href="#" rel="this is not a test" rel="this is invalid syntax (two rels)">
aoseuaoeua

 $ ./test.py
testing, testing, 1, 2, 3
<a_href="#"_rel="this_is_a_test">
<unrelated line>
Stuff
<a_href="#"_rel="this_is_not_a_test">
<a_href="#"_rel="this_is_not_a_test"_rel="this_is_invalid_syntax_(two_rels)">
aoseuaoeua