You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取含指定前置子串的字符串的最后3个字符?(ShellJS场景)

提取含特定关键字行的末尾-%}字符

需求说明:
仅提取文本中前面带有assign或liquid子串的行的最后3个字符(即-%}),比如给定示例中仅匹配第1、2、8行的-%}:

1 {%- assign weather = rain -%}
2 {%- assign num_apples = 10 -%}

3 {%- render 'thing' -%}

4 {%- liquid  
5   if true
6     return
7   endif 
8  -%}

问题分析

你之前尝试的正则未精准匹配目标场景:

  • (?=assign)*.{3}$:正向预查语法错误,未关联liquid关键字,也未限制行内必须包含目标关键字
  • (?=(?<=assign )).*:嵌套预查逻辑混乱,无法定位行末尾的3个字符
  • (?={%- assign )(.*){3}$:仅匹配assign开头的片段,未覆盖liquid场景,捕获逻辑错误

解决方案

匹配目标的正则表达式

使用以下正则可精准匹配符合条件的行末尾-%}:

^.*(assign|liquid).*(-%})$
  • ^.*(assign|liquid).*:匹配行首到包含assign或liquid的任意内容
  • (-%})$:捕获行末尾的-%}字符

如果需要直接提取目标字符,也可以用正向预查限定行内包含关键字:

(?<=.*(assign|liquid).*)-%}$

ShellJS中的使用示例

结合ShellJS工具实现提取/替换:

  1. 提取符合条件的行末尾-%}
shell.grep(/^.*(assign|liquid).*(-%})$/, 'your-file.txt').forEach(line => {
  const target = line.slice(-3);
  console.log(target);
});
  1. 替换符合条件的行末尾-%}
    比如将其替换为%}:
shell.sed('-i', /(^.*(assign|liquid).*)-%}$/, '$1%}', 'your-file.txt');

内容的提问来源于stack exchange,提问作者Katie L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:15:53