液体中的正则表达式可能吗?

Byt*_*ent 6 regex liquid shopify

在我的 Shopify 页面上,我有一堆产品的描述中包含奇怪的字符,我认为这些字符是从 CSV 导入的。如果要逐一检查并手动删除这些字符,工作量会很大。

\n\n

我有这个正则表达式脚本可以在客户端删除它们:

\n\n
$(function() {\n    var regex = /\\?\xc3\x95\xc3\x8c_|_\xc5\x92\xe2\x80\x9a|[\xc5\xa0\xc5\xbd\xc3\x80\xc3\x81\xc3\x82\xc3\x83\xc3\x84\xc3\x85\xc3\x86\xc3\x87\xc3\x88\xc3\x89\xc3\x8a\xc3\x8b\xc3\x8c\xc3\x8d\xc3\x8e\xc3\x8f\xc3\x91\xc3\x92\xc3\x93\xc3\x94\xc3\x95\xc3\x96\xc3\x98\xc3\x99\xc3\x9a\xc3\x9b\xc3\x9c\xc3\x9d\xc3\x9e\xc3\x9f\xc3\xb0\xc3\xbf_]/gi;\n\n    $('.rte').html(function(i, oldHTML) {\n        return oldHTML.replace(regex, ' ')\n            .replace(/[^\\x00-\\x7F]|\\?/g, '');\n    });\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我想移动类似服务器端的东西,并可能用液体重新创建它。这甚至可以用液体来做吗?如何在服务器端使用这个正则表达式?

\n\n

编辑:

\n\n

我写了这个hacky代码

\n\n
{{ product.description | replace: '?\xc3\x8d\xc3\xad_' | replace: '\xc5\x92\xc3\xa6' | replace: '\xc3\xa4\xc3\xb3\xc2\xbb\xc3\xad\xcb\x86\xc3\xad_\xc3\xad\xe2\x80\x9a_' | replace: '\xc3\xad_\xc5\x92\xe2\x80\x9a\xc3\xad__' | replace: '\xcc\xb4\xc3\x8c_' | replace: '?\xc3\x95\xc3\x8c_' | replace: '?\xc3\xad\xc2\xb4\xc3\xad\xc3\xab_' | replace: '\xc3\x8c_\xc3\xa5\xc3\x87\xc3\x8c__' | replace: '\xc3\xa5\xc3\x8a' | replace: '?\xe2\x80\x99\xc2\xab\xc3\xad\xc3\xab\xc3\xad__' | replace: '?\xc3\xad_\xc5\x92\xc3\x87\xc3\xad_\xc3\xad\xe2\x80\x9a_' | replace: '\xc3\xad\xc2\xab\xc3\xad_' | replace: '?\xc3\xad?\xc3\xad__' | replace: '\xe2\x80\x99\xc3\x87\xc3\xad\xc3\xab_' | replace: '\xc3\xad\xc3\xab_\xc3\xad\xc2\xab\xc3\xad\xcb\x86\xc3\xad\xc3\xab__' | replace: '\xc3\xad\xc3\xab\xc3\xad__\xe2\x80\x99\xc3\x87\xc3\xad\xc3\xab\xc3\xad\xc3\xa6\xc3\xad\xc3\xab\xc3\xad___' | replace: '\xe2\x80\x99\xc3\x87', '' }}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这仅在我知道需要替换的特定字符串而不是像我的 javascript 正则表达式中那样从一组字符串中搜索时才有效。

\n

Csa*_*oth 5

您可以使用jekyll-regex-replace Ruby Gem,或者如果需要进一步调整,可以编写自己的插件。我不是 100% 确定你的用例是否 100% 匹配,但沿着这条线:

\n
    \n
  1. 添加到您的_config.yml
  2. \n
\n
plugins:\n  ...\n  - jekyll-regex-replace\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 在您的 Liquid 模板中:
  2. \n
\n
{{ product.description | regex_replace: \'\\?\xc3\x95\xc3\x8c_|_\xc5\x92\xe2\x80\x9a|[\xc5\xa0\xc5\xbd\xc3\x80\xc3\x81\xc3\x82\xc3\x83\xc3\x84\xc3\x85\xc3\x86\xc3\x87\xc3\x88\xc3\x89\xc3\x8a\xc3\x8b\xc3\x8c\xc3\x8d\xc3\x8e\xc3\x8f\xc3\x91\xc3\x92\xc3\x93\xc3\x94\xc3\x95\xc3\x96\xc3\x98\xc3\x99\xc3\x9a\xc3\x9b\xc3\x9c\xc3\x9d\xc3\x9e\xc3\x9f\xc3\xb0\xc3\xbf_]\', \'\' }}\n
Run Code Online (Sandbox Code Playgroud)\n

如果您使用的主机限制了 Jekyll 插件(https://pages.github.com/versions/),那么我只能建议转移到另一个不限制 Jekyll 插件的免费提供商,例如GitLab,这就是我所做的以及

\n
    \n
  1. 如果是 GitLab,您还需要添加到您的Gemfile
  2. \n
\n
group :jekyll_plugins do\n  ...\n  gem "jekyll-regex-replace", "~> 1.1.0"\n
Run Code Online (Sandbox Code Playgroud)\n
\n

GitHub 注释:您也许可以使用 GitHub Action 定义您自己的自定义 Jekyll 构建。不搬家也是一种可能。

\n


Dav*_*zar 1

如果您的产品描述中有来自 CSV 的奇怪字符,为什么不直接清理 CSV,然后重新导入干净的描述文本呢?为自己省去悲伤。删除奇怪的字符表明您搞乱了数据编码。UTF-8 是你的朋友。

使用液体替换过滤器对您有用,但这是超级黑客......最好找到错误的根源并修复它。删除这些字符会有风险,因为在某些情况下您可能会修复某些单词的显示,但在其他情况下,损坏可能仍然存在。

请注意,液体替换过滤器是在服务器端使用的所有内容,它是您的正则表达式选项,即使它与通常的正则表达式功能相去甚远。

  • 这实际上并不能回答问题。 (7认同)