Vanilla Javascript split(regex) to match spaces not preceded by a comma?
令人沮丧的是,我知道javascript不支持lookbehinds,这将使这个任务变得非常简单。
我有一个用户输入的字符串,所以语法必须简单,所以我有一个列表列表,整个列表由空格分隔,子列表由逗号分隔。(这是针对搜索引擎的,所以为什么一个输入捕捉了这么多)所以它可能是……
乔恩,乔4,卡丽,史蒂文17A 14,13,12,37
第一个列表的元素不能包含空格(因此逗号空间是一个可靠的点),
我试过一些正则表达式
([^,])(?!,)\s 在分割场景中不起作用。在替换方案中,我可以使用$1。因为我不完全确定的原因,
(?!,\s) 不起作用。它匹配逗号后面的空格。
我的意思是说
我可以和
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(','); |
小提琴