我知道此问题之前曾在多种变体中被问过,但我似乎无法将所有数据合并到一个可行的解决方案
我在JScript
下运行WSH
。但是,这基本上是一个简单的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
答案 0 :(得分:3)
这需要一个奇怪的事情......但是这里......
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
loop)。我正在挑选:
如果" "
是一个有效的选择,那么第四组会更容易一些,但是你需要更加努力地取消一些空白空间......
那就是说,你只有一个例子,所以很可能会打破其他未经测试的输入。
编辑:措辞和简化正则表达式
EDIT2:对于@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);