Cro*_*rog 4 javascript regex string split
目标是在空格处拆分字符串,但不拆分引号中的文本数据或将其与相邻文本分开.
输入实际上是一个包含值对列表的字符串.如果值值包含空格,则用引号括起来.我需要一个函数,它返回一个值对元素数组,如下例所示:
示例输入:
'a:0 b:1 moo:"foo bar"c:2'
预期结果:
a:0,b:1,moo:foo bar,c:2(长度为4的数组)
我已经检查过其他一些问题,但没有一个(我发现)似乎能解决我的问题.大多数似乎在引号内的空格处分开,或者将"moo:"和"foo bar"分成不同的部分.
克雷格,非常感谢任何帮助
您可以使用此正则表达式进行拆分:
var s = 'a:0 b:1 moo:"foo bar" c:2';
var m = s.split(/ +(?=(?:(?:[^"]*"){2})*[^"]*$)/g);
//=> [a:0, b:1, moo:"foo bar", c:2]
Run Code Online (Sandbox Code Playgroud)
只有当它在引号之外时才会使用正向前瞻分隔空格,以确保在空格后有偶数引号.
您可以稍微不同地处理它,并使用正则表达式来分割空格后跟单词字符和冒号(而不是不在引用部分中的空格):
var str = 'a:0 b:1 moo:"foo bar" c:2',
arr = str.split(/ +(?=[\w]+\:)/g);
/* [a:0, b:1, moo:"foo bar", c:2] */
Run Code Online (Sandbox Code Playgroud)
这个正则表达式在做什么?
它在空格字符上查找文字匹配,然后使用正向前瞻来断言下一部分可以匹配:
[\w]+= 匹配任意单词字符 [a-zA-Z0-9_] 一次和无限次。
\:= 匹配:字符一次(反斜杠转义)。
g= 全局修饰符 - 第一次匹配时不返回。
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |