求助:如何用正则表达式将指定字符串分割为目标格式数组?
解决方法:提取方括号内的文本片段
嘿,我来帮你搞定这个字符串提取的问题!你的需求是把被方括号包裹的每个片段单独提取出来,形成目标数组对吧?咱们先看看你之前用的方法哪里出问题,再给出更靠谱的方案。
为什么你的当前代码不生效?
你用的split(/[^a-zA-Z0-9|]/)会把所有非字母、数字和|的字符当作分隔符,原字符串里的[和]都会被拆分,最后得到的数组会包含很多空字符串:
var search = "[title|Asc][description|Desc]"; var matches = search.split(/[^a-zA-Z0-9|]/); console.log(matches); // 输出 ["", "title|Asc", "", "description|Desc", ""]
显然这不是你想要的结果,咱们换两种更直接的方式来实现。
方案1:直接匹配方括号内的内容(推荐)
用正则表达式直接匹配每个[和]之间的文本,一步到位:
var search = "[title|Asc][description|Desc]"; // 匹配所有在[之后、]之前的非]字符 var matches = search.match(/(?<=\[)[^\]]+/g); console.log(matches); // 输出 ["title|Asc", "description|Desc"]
正则解释:
(?<=\[):正向回溯预查,确保当前位置前面是[(但不会把[包含在匹配结果里)[^\]]+:匹配一个或多个不是]的字符(也就是方括号里的内容)g:全局匹配,找到所有符合条件的片段
如果你对正向预查不太熟悉,也可以用另一种更直观的正则,先匹配整个[xxx],再去掉首尾的括号:
var search = "[title|Asc][description|Desc]"; var matches = search.match(/\[([^\]]+)\]/g).map(item => item.slice(1, -1)); console.log(matches); // 同样得到目标数组
方案2:拆分后过滤空值
如果觉得正则匹配有点绕,也可以先把字符串按[和]拆分,再过滤掉空字符串:
var search = "[title|Asc][description|Desc]"; // 按[或]拆分字符串,然后过滤空元素 var matches = search.split(/[\[\]]/).filter(item => item.trim() !== ""); console.log(matches); // 输出 ["title|Asc", "description|Desc"]
这个方法逻辑更直白,适合刚接触正则的开发者。
内容的提问来源于stack exchange,提问作者Jimmyt1988
相关产品推荐
相关产品推荐

