Vanilla Javascript split(正则表达式)匹配前面没有逗号的空格?

时间:2015-02-17 23:12:37

标签: javascript regex

我知道,令人沮丧的是,javascript并不支持外观设计,这会使这项任务变得非常简单。

我有一个用户输入的字符串,所以语法必须简单,所以我有一个列表列表,整个列表由空格分隔,子列表由逗号分隔。 (这是一个搜索引擎,因此为什么一个输入捕获这么多)所以它可能像...

Jon,Joe4,Carrie,Steve17A 14,13,12,37

第一个列表的元素永远不能包含空格(因此无空间是可靠点)Jon, Joe4, Carrie, Steve17A与第二个列表14, 13, 12, 7之间没有逗号前面的空格。我也总是指望第一个列表

我尝试了一些正则表达式

  • ([^,])(?!,)\s - 在分割方案中不起作用。在替换方案中,我可以使用$ 1.

  • (?!,\s) - 因为我并不完全确定的原因而不能工作。它匹配逗号后面的空格。

我的意图是说List1 = Lists.split(regex)

我可以用replace()编写一些东西......比如

List1 = Lists.replace(/([^,])\s+.*/,"$1");

这将在这种情况下工作,但它可能不仅仅需要完成。除了调用XRegExp(甚至是可行的)之外,还有更好的方法吗?我做得很好,没有涉及图书馆,我不想把它用于一次使用。

2 个答案:

答案 0 :(得分:2)

只需用逗号替换逗号和空格,然后在空格上拆分以获取两个组,然后在逗号上获取部分

var lists  = 'Jon, Joe4, Carrie, Steve17A 14, 13, 12, 37';
var groups = lists.replace(/,\s+/g,',').split(' ');

var parts1 = groups[0].split(',');

FIDDLE

答案 1 :(得分:2)

在这种情况下,@adeneo's approach更简单。

但是,允许您模拟lookbehinds的替代解决方案是反转字符串并使用前瞻:

'Jon, Joe4, Carrie, Steve17A 14, 13, 12, 37'
.split('').reverse().join('')     // Reverse the string
.split(/\s+(?!,)\b/)              // Use lookahead
.reverse()                        // Undo reversion (1)
.map(function(item) {
  return item
    .split('').reverse().join('') // Undo reversion (2)
    .split(/,\s+/);
});