从html属性中删除单引号和双引号,除了href和src之外的所有属性都没有空格

时间:2014-05-11 00:25:33

标签: html regex html-parsing

我正在尝试从html属性中删除单引号和双引号,这些属性是没有空格的单个单词。我写这个正则表达式确实有效:

/((type|title|data-toggle|colspan|scope|role|media|name|rel|id|class|rel)\s*(=)\s*)(\"|\')(\S+)(\"|\')/ims

然而,不是指定我想要删除引号的所有html标签,而是仅列出要忽略的几个属性,如src和href,并删除所有其他属性名称上的引号。所以我写了下面的那个但是对于我的生活它不起作用。除了href和src之外,还有一些如何检测任何属性名称。我尝试了各种组合。

/((?!href|src)(\S)+\s*(=)\s*)(\"|\')(\S+)(\"|\')/i

我试过这个,但它不起作用。它只是删除h和s的href和src的属性。我知道我很亲密但却遗失了一些东西。我在这上花了5个小时。

工作示例

$html_code = 'your html code here.';

preg_replace('/((type|title|data-toggle|colspan|scope|role|media|name|rel|id|class|rel)\s*(=)\s*)(\"|\')(\S+)(\"|\')/i', '$1$5', "$html_code");

2 个答案:

答案 0 :(得分:1)

我修改了您编写的较小的RegEx,结果如下:

((\S)+\s*(?<!href)(?<!src)(=)\s*)(\"|\')(\S+)(\"|\')

当您的版本被解析时,前瞻将到达文档中'href'之前的某个'h'并失败,然后继续下一个字符。由于'ref'与'href'或'src'不匹配,因此模式的其余部分将匹配。

根据我的修改,正则表达式最初会接受任何'href'或'src'。当达到lookbehind时,它将在已经解析的文本中检查'href',如果找到则会失败。

答案 1 :(得分:0)

此外,最好不要过滤Stringlet imageData = tableImageArray[indexPath.row] let image = imageData.base64EncodedStringWithOptions([]) 属性,而是过滤掉href。这将是一个很好的正则表达式(这个正则表达式也假设所有属性都使用双引号):

src