用多个分隔符分隔字符串,保留它们并在双引号中忽略它们
Split string by multiple delimiters, keep them and ignore them in double quotes
我知道这个问题以前已经问过很多次了,但我似乎无法将所有数据合并到一个工作解决方案
动机我有一个运行在WSH
下的JScript
。然而,这本质上是一个简单的javascript
| regexp
问题
我正在尝试解析一个字符串。要求:
- 用多个分隔符分隔:
-
,=
- 忽略用双引号括起来的分隔符
- 将分隔符保留在结果 中
这是我一直在处理的字符串。双引号是字符串
的一部分。"C:''Users''u 1''a-b''f1.txt" -CONFIG="C:''Users''u 1''c=d''f2.xfg"-ARGS=/quite /v1
拆分后的预期结果
-
"C:''Users''u 1''a-b''f1.txt"
-
-
-
CONFIG
-
=
-
"C:''Users''u 1''c=d''f2.xfg"
-
-
-
ARGS
-
=
-
/quite /v1
失败
var str = '"C:''Users''u 1''a-b''f1.txt" -CONFIG="C:''Users''u 1''c=d''f2.xfg"-ARGS=/quite /v1';
var res = str .split(/-(?=(?:(?:[^"]*"){2})*[^"]*$)/);
失败的结果:
-
'"C:''Users''u 1''a-b''f1.txt
-
CONFIG='"C:''Users''u 1''c=d''f2.xfg'"
-
ARGS=/quite /v1
这是一个奇怪的东西需要…
var str = '"C:''Users''u 1''a-b''f1.txt" -CONFIG="C:''Users''u 1''c=d''f2.xfg"-ARGS=/quite /v1';
var res = [];
str.replace(/".*?"|-|=|[^-="'s]+(?:'s[^-="]+)?/g, function(m) { res.push(m); });
console.log(res);
split
使用起来很棘手,因为你需要定义什么是不想要的;查找所有匹配更好(在JavaScript中,replace
是最简单的方法-另一个是exec
循环)。我挑出来了:
- 引用字符串
- 破折号
- =
- 不适合上述 的字符串
如果" "
是一个有效的东西,那么第四组将更容易一些,但是您需要额外努力来取消普通空格的资格…
也就是说,您只有一个示例,因此它很可能与其他未经测试的输入相冲突。
编辑:措辞,并简化正则表达式
EDIT2: for @ndn,一个处理''n
的版本:
var str = '"C:''Users''u 1''a-b''f1.txt" -CONFIG="C:''Users''u''"3''"''c=d''f2.xfg"-ARGS=/quite /v1';
var res = [];
str.replace(/"(?:''"|[^"])*"|-|=|[^-="'s]+(?:'s[^-="]+)?/g, function(m) { res.push(m); });
console.log(res);
相关文章:
- javascript函数内部的代码用逗号而不是分号分隔
- 可以't用回车符分隔那个字符串
- 计算输入中有多少逗号分隔的字符串
- Javascript和RegEx:拆分并保留分隔符
- 选择带有空格分隔单词的元素
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- 使用JavaScript分析分隔文本行
- 不使用分隔符分解字符串
- 设置自动分隔符的自定义属性
- 用分隔符分隔具有多个整数值的字符串的Javascript"重试错误的值
- JS将分隔符分隔的字符串转换为数组元素
- JavaScript/jQuery根据一个公共属性选择多个项目,并将它们作为用分隔符分隔的字符串传递给JavaBean
- javascript多分隔拆分&将使用过的分隔符返回到数组
- 如何对由分隔的数字使用jquery函数.(点)或,(逗号)作为千分隔符
- 如何在此分隔符中按行分隔文本
- 用于分隔值列表的正则表达式,其中的值可能包含分隔符
- 用多个分隔符分隔字符串,保留它们并在双引号中忽略它们
- 如何用千位分隔符解析两个空格分隔的数字
- 如何使用regex和javascript替换分隔字符串的每个字段分隔符(例如,逗号到分号)
- 用分隔符分隔字符串,但将分隔符包含在返回数组中