我正在使用此正则表达式来分割字符串
(/\:|(#[0-9]*\s*)|\s*\|\s*|\s*\/\s*/)
用于标识冒号:
或表达式#1
或管道符号|
或正斜杠/
。
案例1:如果是:
,/
,|
,我想拆分字符串并删除这些符号。
案例2:在模式#12
的情况下,我想将这个模式保留在数组中,也就是我们在分割之后得到的
所以我有字符串#12 start|hello hi/bye : end
分裂功能应该给我一个像['#12;#39;开始','你好',' hi',' ;再见'。]
这里的问题是使用表达式(#[0-9]*\s*)
按需要拆分数组,给出数组中的模式,但也在数组中给出undefined。使用没有像#[0-9]*\s*
这样的括号的分割数组,不会给出未定义的,但也不会给出数组中的模式#12。
PS:我上面引用的例子只是为了解释问题的背景。
答案 0 :(得分:0)
结果数组中的Emtpy项目将以这种方式出现,因为这就是split
的工作原理:一旦找到匹配,之前的子字符串被推送到数组甚至如果它是一个空字符串。因此,在随后的匹配之间,您将始终获得这些空项目。
您可以使用
/\s*(?:(#[0-9]+)|[:\/|])\s*/
并删除所有空字符串.filter(Boolean)
:
console.log(
'#12 start|hello hi/bye : end'.split(/\s*(?:(#[0-9]+)|[:\/|])\s*/).filter(Boolean)
);

请参阅regex demo。
<强>详情
\s*
- 0+ whitespaces (?:
- 两种选择中的任何一种:
(#[0-9]+)
- 第1组(将添加到输出中):#
和1+位数|
- 或[:\/|]
- :
,/
或|
)
- 小组结尾\s*
- 0+空格。答案 1 :(得分:-1)
请尝试使用此模式。
`#12 start|hello hi/bye : end`.split(/[^\w#]+/);
除了#
之外,它基本上按非字字符序列拆分字符串。这种模式实际上更容易阅读和修改。