如何在'''特殊字符间分割字符串并提取目标子串?
提取字符串中被'''包裹的标签
没问题,这事儿用正则表达式就能轻松解决!针对你给出的字符串,我们可以通过匹配三个单引号包裹的内容,提取出里面的标签并组成数组。
方法一:使用match+map快速实现
这是最简洁的写法,一行代码就能搞定:
const str = " My random text '''tag1''' '''tag2''' "; const tags = str.match(/'''(.*?)'''/g)?.map(item => item.replace(/'''/g, '').trim()) || []; console.log(tags); // 输出: ["tag1", "tag2"]
代码解释:
/'''(.*?)'''/g:全局匹配所有被三个单引号包裹的内容。其中(.*?)是非贪婪捕获,确保只会匹配到相邻的两个'''之间的内容,不会把多个标签连在一起匹配。?.map(...):如果match返回null(也就是没有找到任何标签),会直接跳过map避免报错。replace(/'''/g, ''):去掉每个匹配项前后的三个单引号。trim():处理标签前后可能存在的空格(如果你的标签本身带空格需要保留,可以去掉这个方法)。|| []:兜底处理,确保没有匹配到内容时返回空数组。
方法二:使用exec循环捕获(更灵活)
如果需要对每个匹配到的标签做更复杂的处理,这种循环捕获的方式会更可控:
const str = " My random text '''tag1''' '''tag2''' "; const tagRegex = /'''(.*?)'''/g; const tags = []; let currentMatch; // 循环执行exec,直到没有匹配项 while ((currentMatch = tagRegex.exec(str)) !== null) { // currentMatch[1]就是捕获到的标签内容,trim后推入数组 tags.push(currentMatch[1].trim()); } console.log(tags); // 输出: ["tag1", "tag2"]
注意事项:
如果你的标签内容里可能包含单个或两个连续的单引号(不是三个),这两种方法依然有效,因为我们是以三个连续单引号作为匹配边界的。
内容的提问来源于stack exchange,提问作者nmsdvid
相关产品推荐
相关产品推荐

