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

如何在JavaScript中将问号包裹的文本提取为数组?附示例需求

如何提取字符串中被问号包裹的内容为JavaScript数组?

嘿,这是个很实用的字符串处理需求,我给你整理了几种不同的实现方式,你可以根据自己的环境和偏好选择👇

先明确你的需求:

原字符串:var str = " This is a ?sample? text to ?extract? question marks separated texts into an array in ?Javascript?. "
目标数组:arr = ['sample', 'extract', 'Javascript']

方法1:使用matchAll(ES6+推荐)

这是最简洁直观的现代写法,利用正则捕获组配合matchAll一次性提取所有内容:

const str = " This is a ?sample? text to ?extract? question marks separated texts into an array in ?Javascript?. ";
// 正则说明:匹配?开头,捕获所有非?的字符(即问号中间的内容),最后匹配?结尾,全局匹配所有符合项
const regex = /\?([^?]+)\?/g;
// 将matchAll返回的迭代器转为数组,提取每个匹配结果的捕获组内容
const arr = Array.from(str.matchAll(regex), match => match[1]);

console.log(arr); // 输出: ['sample', 'extract', 'Javascript']

方法2:使用exec循环(兼容旧环境)

如果需要兼容ES6之前的老式浏览器或环境,可以用exec循环逐个提取内容:

const str = " This is a ?sample? text to ?extract? question marks separated texts into an array in ?Javascript?. ";
const regex = /\?([^?]+)\?/g;
const arr = [];
let matchResult;

// 循环执行exec,直到没有匹配结果为止
while ((matchResult = regex.exec(str)) !== null) {
  // 提取捕获组中的内容(即问号中间的文本)
  arr.push(matchResult[1]);
}

console.log(arr); // 输出: ['sample', 'extract', 'Javascript']

注意:这里正则必须加上全局标志g,否则exec会一直重复匹配第一个结果,陷入死循环。

方法3:字符串分割+过滤(无正则思路)

如果你对正则不太熟悉,也可以用字符串分割的方式实现,逻辑简单易懂:

const str = " This is a ?sample? text to ?extract? question marks separated texts into an array in ?Javascript?. ";
// 用问号分割字符串,得到的数组结构是:[前缀文本, 目标内容1, 中间文本, 目标内容2, ...]
const splitParts = str.split('?');
// 提取数组中奇数索引的项(因为这些就是问号中间的内容),同时过滤掉可能的空字符串
const arr = splitParts.filter((item, index) => index % 2 === 1 && item.trim() !== '');

console.log(arr); // 输出: ['sample', 'extract', 'Javascript']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:02:39