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

JavaScript中匹配以三个点开头的字符串并处理的正则问题

处理JavaScript字符串数组:移除开头三点并截断问号后内容

一、先筛出开头带三个点的字符串

你之前用^\.只匹配单个点,是因为正则里.是通配符,必须用\转义;要匹配三个连续的点,要么写^\.\.\.,要么用更简洁的^\.{3}({3}表示重复前面的字符3次)。

对新手来说,用字符串原生的startsWith('...')更直观好懂:

const originalArr = ["...how to do this? - Th0be [22.2.2022]", "普通字符串", "...另一测试? 多余内容"];
// 筛选出开头是...的字符串
const targetStrings = originalArr.filter(str => str.startsWith('...'));

二、处理字符串的两个步骤

1. 去掉开头的三个点

既然已经确定字符串开头是三个点,直接用slice(3)从第3个字符开始截取最省事,不用正则:

const withoutDots = targetStr.slice(3);

要是想用正则替换,就用replace(/^\.{3}/, ''),效果完全一致。

2. 截断问号之后的内容(保留问号)

看你的示例,要保留到问号(如果有的话),删掉后面的所有内容。这里用split('?')拆分最直观:

// 按问号拆分字符串
const parts = withoutDots.split('?');
// 如果有问号,就取第一部分加问号;没有就直接用原内容
const finalStr = parts.length > 1 ? `${parts[0]}?` : withoutDots;

要是想用正则,就把?及后面的内容替换成?(没有问号的话不会触发替换):

const finalStr = withoutDots.replace(/(\?.*)$/, '?');

完整代码示例

把筛选和处理逻辑整合到一起:

const originalArr = [
  "...how to do this? - Th0be [22.2.2022]",
  "没带三点的字符串",
  "...没有问号的内容",
  "...带问号的例子? 这部分要删掉"
];

const result = originalArr
  .filter(str => str.startsWith('...'))
  .map(str => {
    const withoutDots = str.slice(3);
    const parts = withoutDots.split('?');
    return parts.length > 1 ? `${parts[0]}?` : withoutDots;
  });

console.log(result);
// 输出:
// ["how to do this?", "...没有问号的内容", "带问号的例子?"]

对你之前正则问题的补充

  • 你写的^\.只匹配单个点,要匹配开头的三个连续点,用^\.{3}或者^\.\.\.都可以,^确保只匹配字符串开头的点。
  • 你用的[^?]*$其实是匹配字符串末尾所有非问号的字符,这不是你需要的逻辑。要删除问号之后的内容,应该匹配\?.+$(\?匹配问号,.+匹配后面任意内容,$表示到结尾),如果要保留问号,就把这部分替换成?即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:51:11