Ruby:Escape仅在带有html的字符串的非html部分引用

时间:2014-02-06 12:12:07

标签: ruby regex

我有一个字符串可以包含这样的html:

 Hello my name is <a href='...'>felipe</a> and I've one brother

我只需要scape html之外的引号。所以结果将是

 Hello my name is <a href='...'>felipe</a> and I\'ve one brother

有什么想法吗?宝石?

3 个答案:

答案 0 :(得分:0)

如果您获得一串“自由文本HTML”,这将很难做到,因为基本上必须解析它。

大多数模板语言都提供了一些区分“原始HTML”和“要转义的字符串内容”的方法。这通常是您应该解决此问题的地方,那么您对模板使用的是什么?

答案 1 :(得分:0)

这是一个基本的正则表达式,你可以用来匹配html元素标签之外的单引号...我没有彻底测试它,但它匹配你的输入字符串以及我尝试过的其他一些变体。< / p>

'(?![^<]*>)

它基本上只匹配单引号后面没有'&gt;'除非有'&lt;'在'&gt;'

前面

以下是替换的结果:

your_string.gsub(/'(?![^<]*>)/, "\\\\'")

由于gsub如何解析替换字符串,您必须使用替换字符串中的所有反斜杠。

答案 2 :(得分:-1)

通过这个问题,我了解到无法用正则表达式解析html字符串。 Ruby有非常好的html解析器,比如 Nokogiri ,我用来解决我的问题

这个问题对此有一个很好的解释。

RegEx match open tags except XHTML self-contained tags