我正在尝试从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");
答案 0 :(得分:1)
我修改了您编写的较小的RegEx,结果如下:
((\S)+\s*(?<!href)(?<!src)(=)\s*)(\"|\')(\S+)(\"|\')
当您的版本被解析时,前瞻将到达文档中'href'之前的某个'h'并失败,然后继续下一个字符。由于'ref'与'href'或'src'不匹配,因此模式的其余部分将匹配。
根据我的修改,正则表达式最初会接受任何'href'或'src'。当达到lookbehind时,它将在已经解析的文本中检查'href',如果找到则会失败。
答案 1 :(得分:0)
此外,最好不要过滤String
或let imageData = tableImageArray[indexPath.row]
let image = imageData.base64EncodedStringWithOptions([])
属性,而是过滤掉href
。这将是一个很好的正则表达式(这个正则表达式也假设所有属性都使用双引号):
src