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的问题,没人知道谁投了反对票,也不知道为什么,我同意。下层选民要么就提出改进意见发表评论,要么就这个问题给出自己的答案。