如何在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
相关产品推荐
相关产品推荐

