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

JavaScript正则表达式:匹配特定结尾字符串前的内容

在JavaScript中用正则匹配特定结尾前的内容

刚好碰到过类似的需求,我来给你一步步讲清楚怎么实现~

核心思路是用正向预查(Positive Lookahead),这个正则特性可以帮我们匹配到“后面紧跟着特定结尾字符串”的内容,而且不会把结尾字符串本身包含在匹配结果里,完美符合你的需求。

具体正则表达式

针对你说的结尾是endof1或endof2的情况,正则可以这么写:

const regex = /^(.*?)(?=endof1|endof2)$/;

拆解每个部分的作用

  • ^:匹配字符串的起始位置,确保我们从字符串最开头开始匹配
  • .*?:非贪婪模式匹配任意字符(*?是关键,避免过度匹配到后面的结尾)
  • (?=endof1|endof2):正向预查断言,意思是“当前位置后面必须是endof1或者endof2”,而且这部分不会被计入匹配结果
  • $:匹配字符串的结束位置,确保整个字符串刚好以endof1或endof2结尾(如果你的场景允许结尾后面还有其他内容,可以去掉这个$)

实际代码示例

我们用你的测试案例来验证一下:

// 测试用例
const testStrings = ['abcendof1', 'cdeendof2', 'xyzendof3', 'testendof1extra'];

const regex = /^(.*?)(?=endof1|endof2)$/;

testStrings.forEach(str => {
  const result = str.match(regex);
  if (result) {
    console.log(`"${str}" 的匹配结果:${result[1]}`);
  } else {
    console.log(`"${str}" 不符合结尾要求,无匹配结果`);
  }
});

运行这段代码会输出:

"abcendof1" 的匹配结果:abc
"cdeendof2" 的匹配结果:cde
"xyzendof3" 不符合结尾要求,无匹配结果
"testendof1extra" 不符合结尾要求,无匹配结果

额外注意事项

  1. 处理换行符:如果你的字符串里包含换行符,默认情况下.不会匹配换行,这时候可以加上s修饰符(ES2018及以上支持):
    const regex = /^(.*?)(?=endof1|endof2)$/s;
    
  2. 匹配第一个出现的结尾:如果字符串里有多个结尾(比如abcendof1defendof2),用上面的正则会匹配到abcendof1def(因为直到最后一个结尾)。如果你想匹配到第一个结尾之前的内容,可以把正则改成:
    const regex = /^(.*?)(?=endof1|endof2)/;
    
    去掉$后,会匹配到第一个符合条件的结尾前的内容,比如abcendof1defendof2会得到abc。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:59:30