【问题标题】:How to define a custom escape sequence for a string, and then parse it?如何为字符串定义自定义转义序列,然后解析它?
【发布时间】:2012-10-04 11:06:16
【问题描述】:

我正在编写一个简单的 Ruby on Rails 应用程序。我有一个带有“描述”属性的模型,它是一个字符串。

我想在视图中显示此字符串,但字符串中的一些单词使用特殊的音乐字体(位于 here 的字体之一)呈现,并且休息使用网站的主要字体。问题是,由于 description 属性只是一个持久化到数据库中的字符串,因此没有真正的方法来判断哪些单词应该使用特殊字体...

我能想到的唯一方法是定义我自己的“转义序列”或“特殊字符”,这样我就可以向视图指示一个单词是否应该使用特殊字体。

例如,假设我有以下字符串:

cat dog rabbit elephant

如果我想让“dog”和“elephant”使用特殊字体,我可以将字符串存储在数据库中:

cat ${dog} rabbit ${elephant}

换句话说,使用“${}”作为自定义转义序列。

然后在我看来,我将有一个辅助方法来处理字符串,并为使用转义序列的单词生成适当的 HTML/CSS。例如,这是我期望它产生的那种输出:

<p>cat <span class="music">dog</span> rabbit <span class="music">elephant</span></p>

这看起来是一个合理的解决方案吗?如果是这样,我将如何实现视图方法来解析字符串和转义字符?我猜是某种正则表达式?

在某种程度上,它有点类似于 LaTeX 允许您渲染数学方程式的方式。例如,在 LaTeX 中,要激活特定字符的数学字体,您可以这样做:

 \mathnormal{some text}

【问题讨论】:

    标签: ruby regex escaping character special-characters


    【解决方案1】:

    您可以直接将 html sn-p 存储在您的数据库中。

    <p>cat <span class="music">dog</span> rabbit <span class="music">elephant</span></p>
    

    否则,每次请求时您都必须重新制作 HTML 字符串。

    如果这不是一个选项,您可以使用简单的正则表达式将 ${} 替换为 html sn-p。

    string = "cat ${dog} rabbit ${elephant}"
    string.gsub /\$\{([^\}]+)\}/, '<span class="music">\1</span>'
    
        => "cat <span class=\"music\">dog</span> rabbit <span class=\"music\">elephant</span>"
    

    【讨论】:

    • 谢谢!我宁愿不在数据库中存储 HTML,所以使用 gsub 的第二个解决方案非常有效。
    猜你喜欢
    • 1970-01-01
    • 2022-10-16
    • 2020-03-17
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多