2015-02-05 69 views
0

我有以下的2串,我应该根据分隔符来拆分:“/”或“/ *”JavaScript的分割字符串与正则表达式

我的代码:

var move = "1/2/13/14"; 
var results = move.split(new RegExp("[/\*?]")); 

效果都不错:

["1","2","13","14"] 

但是,对于下一个例子:

var move = "1/*2/13/*14"; 
var results = move.split(new RegExp("[/\*?]")); 

我得到不良结果:

["1","","2","13","","14"] 

为什么?我如何修改它以正确工作?

谢谢!

+0

你期望的结果是?就像第一个? – epascarello 2015-02-05 17:24:30

回答

2

使用[],你正在创建一个字符类,这意味着“这些符号中的任何一个。”这意味着您的正则表达式正在寻找文字字符/,*(在char类中不必转义),?用于分割。 *?不会在字符类中使用它们的元功能。

您需要的正则表达式是/\/\*?/(作为正则表达式)或构造函数new RegExp("/\\*?")。你不需要角色类。

3

你可以只让*可选后/

"1/*2/13/*14".split(/\/\*?/); 
["1", "2", "13", "14"] 

"1/2/13/14".split(/\/\*?/); 
["1", "2", "13", "14"] 
1

您遇到问题,因为您正在使用括号对字符进行分组。 [])。在正则表达式中,这些字符将允许组中的任何字符进行匹配。

如果你像这样删除它们:var results = move.split(new RegExp("/\\*?"));,你应该得到你想要的结果。

0

此人帮助:

move.split(new RegExp("[/][*]?")); 
+0

@eldarerathis只是为了记录,具有'*'的字符类中的单个'\'不会产生任何影响,因为它被解释为转义符号。 ('move.split(/ [/] [\\ *]?/)'; nb:'RegExp'构造函数接受一个字符串作为其参数,因此会应用双重转义,因此它需要'新的RegExp(“[/] [\\\\\ *]?”)'失败)。无论如何,你是完全正确的,角色类内的逃跑是多余的。 – collapsar 2015-02-05 17:30:03

相关问题