我知道,令人沮丧的是,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(甚至是可行的)之外,还有更好的方法吗?我做得很好,没有涉及图书馆,我不想把它用于一次使用。
答案 0 :(得分:2)
只需用逗号替换逗号和空格,然后在空格上拆分以获取两个组,然后在逗号上获取部分
var lists = 'Jon, Joe4, Carrie, Steve17A 14, 13, 12, 37';
var groups = lists.replace(/,\s+/g,',').split(' ');
var parts1 = groups[0].split(',');
答案 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+/);
});