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

如何提取字符串中指定单词后到目标单词的子串(含目标单词)

提取指定标识间的目标子串(包含结尾标识)

我来帮你搞定这个子串提取的问题!你的需求很明确——从原字符串"Old Macdonald had a farm and on"里拿到Macdonald之后、直到并包含farm的内容,下面给你两种实用的实现方法:

方法一:用字符串基础方法(indexOf + slice)

这种方法逻辑直观,适合不熟悉正则的同学,一步步拆解需求:

  1. 先找到Macdonald的结束位置:用indexOf获取它的起始索引,再加上它自身的长度,就能定位到它之后的第一个字符位置。
  2. 再从这个起始位置开始,找到farm的结束位置:同样用indexOf获取farm的起始索引,加上它的长度,确保结果包含farm。
  3. 最后用slice截取两个位置之间的内容。

代码示例(以JavaScript为例):

const originalStr = "Old Macdonald had a farm and on";
const startMarker = "Macdonald";
const endMarker = "farm";

// 计算起始位置:Macdonald结束后的第一个字符
const startPos = originalStr.indexOf(startMarker) + startMarker.length;
// 从起始位置开始找farm的索引,再加上farm长度得到结束位置
const endPos = originalStr.indexOf(endMarker, startPos) + endMarker.length;

// 增加容错判断,避免找不到标识时出错
if (startPos <= startMarker.length - 1 || endPos <= endMarker.length - 1) {
  console.log("未找到指定的标识内容");
} else {
  const result = originalStr.slice(startPos, endPos);
  console.log(result); // 输出: had a farm
}

方法二:用正则表达式(简洁高效)

如果想写得更简洁,正则表达式是不错的选择。这里可以用正向零宽断言来匹配Macdonald之后的位置,再用非贪婪匹配拿到直到farm的内容:

代码示例:

const originalStr = "Old Macdonald had a farm and on";
// 正则含义:匹配Macdonald之后的任意字符,直到并包含farm
const regex = /(?<=Macdonald).*?farm/;
const matchResult = originalStr.match(regex);

if (matchResult) {
  console.log(matchResult[0]); // 输出: had a farm
} else {
  console.log("未找到匹配的内容");
}

解释一下:

  • (?<=Macdonald):正向零宽断言,确保匹配的内容在Macdonald之后,但不会把Macdonald包含到结果里。
  • .*?:非贪婪匹配任意字符,避免如果字符串里有多个farm时,匹配到最后一个farm的情况。

两种方法都能满足你的需求,你可以根据自己的习惯选择~

内容的提问来源于stack exchange,提问作者Aus Gamer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:14:09