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

Vanilla Javascript split(regex) to match spaces not preceded by a comma?

令人沮丧的是,我知道javascript不支持lookbehinds,这将使这个任务变得非常简单。

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

乔恩,乔4,卡丽,史蒂文17A 14,13,12,37

第一个列表的元素不能包含空格(因此逗号空间是一个可靠的点),Jon, Joe4, Carrie, Steve17A与第二个列表14, 13, 12, 7之间用不带逗号的空格隔开。我也总是能指望第一个名单总是

我试过一些正则表达式

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

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

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

我可以和replace()搞点什么……有点像

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

在这种情况下,这是可行的,但可能比需要做的更多。除了调用xregexp(如果可行)还有更好的方法吗?我写的每件事都做得很好,没有涉及到图书馆,我不想把它一次带进来使用。


在这种情况下,@adineo的方法更简单。

但是,另一种允许您模拟lookbehinds的解决方案是反转字符串并使用lookahead:

1
2
3
4
5
6
7
8
9
'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+/);
});


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

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

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

小提琴