- 改进:引号引起来的不受分隔符影响
记录一个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const splitStr = (str, regBlock = /[;|;]+\ */) => { let blocks = []; let charPos = 0; while (str) { let block = str.match(regBlock); if (!block) { blocks.push({ substr: str, startAt: charPos }); break; } let tagStartAt = block.index; let tagLen = block[0].length; blocks.push({ substr: str.substring(0, tagStartAt), startAt: charPos }); charPos += (tagStartAt + tagLen); str = str.substring(tagStartAt + tagLen, str.length); }
return blocks; };
|
name 林杉 林四; 年级 2016 ; 班级 16B5的输出:
1 2 3 4 5
| [ { substr: 'name 林杉 林四', startAt: 0 }, { substr: '年级 2016 ', startAt: 13 }, { substr: '班级 16B5', startAt: 24 } ]
|
改进:引号引起来的不受分隔符影响
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
const splitStr = (str, seperator) => { const quoteReg = /[\'|\"|“|‘|”|’]/; let substr = ''; let substrArr = []; let inQuote = false; let i; for (i = 0, ch = str[i]; i < str.length; i++, ch = str[i]) { if (quoteReg.test(ch)) { inQuote = !inQuote; if (!inQuote && substr) { substr += ch; continue; } } if (!inQuote && seperator.test(ch)) { if (substr) { substrArr.push({ substr, startAt: i - substr.length }); substr = ''; } continue; } substr += ch; } if (substr) { substrArr.push({ substr, startAt: i - substr.length }); } return substrArr; }
|
调用:
1 2 3
| let str = '珞樱缤纷,我的灵魂,“和着节奏,穿梭行走,幻觉爱上这花瓣”,盛开后落无忧;“秋去春来,花落会开;我们何时再回头?” 倘若沦为合照朋友;“一切是曾有”'; console.log(splitStr(str, /[\ |\:|:|\,|,]+/)); console.log(splitStr(str, /[;|;]+\ */));
|
输出(包含引号):
1 2 3 4 5 6 7 8 9 10 11 12
| [ { substr: '珞樱缤纷', startAt: 0 }, { substr: '我的灵魂', startAt: 5 }, { substr: '“和着节奏,穿梭行走,幻觉爱上这花瓣”', startAt: 10 }, { substr: '盛开后落无忧;“秋去春来,花落会开;我们何时再回头?”', startAt: 30 }, { substr: '倘若沦为合照朋友;“一切是曾有”', startAt: 58 } ] [ { substr: '珞樱缤纷,我的灵魂,“和着节奏,穿梭行走,幻觉爱上这花瓣”,盛开后落无忧', startAt: 0 }, { substr: '“秋去春来,花落会开;我们何时再回头?” 倘若沦为合照朋友', startAt: 37 }, { substr: '“一切是曾有”', startAt: 67 } ]
|