36 lines
1023 B
JavaScript
36 lines
1023 B
JavaScript
|
"use strict";
|
||
|
|
||
|
module.exports = parseArgsStringToArgv;
|
||
|
module.exports.parseArgsStringToArgv = parseArgsStringToArgv;
|
||
|
|
||
|
function parseArgsStringToArgv(value, env, file) {
|
||
|
// ([^\s'"]+(['"])([^\2]*?)\2) Match `text"quotes text"`
|
||
|
|
||
|
// [^\s'"] or Match if not a space ' or "
|
||
|
|
||
|
// (['"])([^\4]*?)\4 or Match "quoted text" without quotes
|
||
|
// `\2` and `\4` are a backreference to the quote style (' or ") captured
|
||
|
var myRegexp = /([^\s'"]+(['"])([^\2]*?)\2)|[^\s'"]+|(['"])([^\4]*?)\4/gi;
|
||
|
var myString = value;
|
||
|
var myArray = [
|
||
|
];
|
||
|
if (env) {
|
||
|
myArray.push(env);
|
||
|
}
|
||
|
if (file) {
|
||
|
myArray.push(file);
|
||
|
}
|
||
|
var match;
|
||
|
do {
|
||
|
// Each call to exec returns the next regex match as an array
|
||
|
match = myRegexp.exec(myString);
|
||
|
if (match !== null) {
|
||
|
// Index 1 in the array is the captured group if it exists
|
||
|
// Index 0 is the matched text, which we use if no captured group exists
|
||
|
myArray.push(match[1] || match[5] || match[0]);
|
||
|
}
|
||
|
} while (match !== null);
|
||
|
|
||
|
return myArray;
|
||
|
}
|