Javascript JS正则表达式,我想使用它拆分字符串,但在一种情况下保留分隔符,但在其他情况下放弃

Javascript JS正则表达式,我想使用它拆分字符串,但在一种情况下保留分隔符,但在其他情况下放弃,javascript,regex,Javascript,Regex,我正在使用这个正则表达式来拆分字符串 (/\:|(#[0-9]*\s*)|\s*\\s*\s*\/\s*/) 其中用于标识冒号:或类似#1的表达式或管道符号|或正斜杠/ 案例1:如果出现:,/,|,我想拆分字符串并删除这些符号 案例2:在模式#12的情况下,我想将这个模式也保留在数组中,这是我们分割后得到的 例如我有字符串#12开始|你好/再见:结束 拆分函数应该给我一个类似['#12',start',hello',hi',bye']的数组 这里的问题是使用表达式(#[0-9]*\s*)根据需要

我正在使用这个正则表达式来拆分字符串

(/\:|(#[0-9]*\s*)|\s*\\s*\s*\/\s*/)

其中用于标识冒号
或类似
#1
的表达式或管道符号
|
或正斜杠
/

案例1:如果出现
/
|
,我想拆分字符串并删除这些符号

案例2:在模式
#12
的情况下,我想将这个模式也保留在数组中,这是我们分割后得到的

例如我有字符串
#12开始|你好/再见:结束
拆分函数应该给我一个类似['#12',start',hello',hi',bye']的数组

这里的问题是使用表达式
(#[0-9]*\s*)
根据需要拆分数组,在数组中提供模式,但在数组中也提供未定义的模式。而在不使用括号的情况下使用它,如
#[0-9]*\s*
会分割数组,不会给出未定义的,也不会给出数组中的模式#12


PS:我上面引用的例子只是为了解释问题的背景。

试试这个模式

`#12 start|hello hi/bye : end`.split(/[^\w#]+/);

它基本上是按非单词字符序列分割字符串,除了
#
。此模式实际上更易于阅读和修改。

使用此方法,结果数组中的Emtpy项将显示,因为这就是拆分的工作方式:一旦找到匹配项,之前的子字符串将被推送到数组中,即使它是空字符串。因此,在后续匹配之间,您将始终得到这些空项

你可以用

/\s*(?:(#[0-9]+)|[:\/|])\s*/
并使用
.filter(Boolean)
删除所有空字符串:

console.log(
“#12开始|你好/再见:结束”。拆分(/\s*(?:(#[0-9]+)|[:\/\124;])\ s*/)。筛选器(布尔值)

);我已经编写了代码,精确地说,表达式也解释了我得到的输出,它只是不能正常工作,我正在寻求帮助?问题@31piyYou总是可以从数组中删除
未定义的
和空字符串:
str.split(regexp)。filter(Boolean)
你不能想要
'hello','hi'
你似乎想要
'hello hi'
为什么要下选?这就是StackOverflow的问题,没人知道谁投了反对票,也不知道为什么,我同意。下层选民要么就提出改进意见发表评论,要么就这个问题给出自己的答案。