前言
最近在公司遇到个小需求,大概就是一段字符串’【测试1】 【测试2】 ….’,就类似与【】
这个符号,包裹着字符串,我需要根据这些个字符串进行后续的操作,换句话讲,核心就是将【】
中的文字给提取出来。不知道大家会怎么做,我当时就想到了一个数据结构–栈,先进后出的想法。
实现思路
当我们匹配到【
的时候,将后续的内容压到栈底部,等再次匹配到】
的时候,将内容出栈
代码实现
1 | const remark=`【缺提单号】 【缺合同号】 【缺收发货人】 【缺生产销售单位】 【缺境外收货人】 【缺运输方式】 【缺监管方式】 【缺征免性质】 【缺贸易国】 【缺运抵国】 【缺指运港】 【缺成交方式】 【缺杂费数量】 【缺杂费币制】 【缺件数】 【缺毛重】 【缺净重】 【缺包装种类】 【缺船名】 【缺航次】 【缺许可证号】 【品1:缺成交数量】 【品1:缺成交单位】 【品1:缺总价】 【品1:缺千克数】 【品1:缺币制】 【品1:缺征免】 【品1:缺原产国】 【品1:缺最终目的国】 【品1-6:缺千克数】` |
经过这样的操作,我们就可以简单的得到我们【】
中字符串的数组了。
其他思路
当然你也可以用我们常用的正则来进行匹配
代码实现
1 | const regex = /【(.*?)】/g; |
这段代码使用了正则表达式 /【(.?)】/g,其中 【(.?)】 表示匹配以 “【” 开始,以 “】” 结束的内容,并使用 .*? 来匹配任意字符,非贪婪模式。
通过调用字符串的 match() 方法,传入正则表达式作为参数,可以获取到所有匹配的结果,即所有位于【】中的字符串。
此时并没有达到我上面的效果,还是需要进行一次replace
1 | const results = matches.map(match => match.replace(/【|】/g, '')); |
这个算法也可以进行实现我的需求,但是时间复杂度要大于栈的处理方式
结语
本篇文章就到这里了,这是我写代码时感到挺有意思的,就想着和大家分享一下,债见~