Spaces:
Running
Running
; | |
// See http://www.robvanderwoude.com/escapechars.php | |
const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; | |
function escapeCommand(arg) { | |
// Escape meta chars | |
arg = arg.replace(metaCharsRegExp, '^$1'); | |
return arg; | |
} | |
function escapeArgument(arg, doubleEscapeMetaChars) { | |
// Convert to string | |
arg = `${arg}`; | |
// Algorithm below is based on https://qntm.org/cmd | |
// Sequence of backslashes followed by a double quote: | |
// double up all the backslashes and escape the double quote | |
arg = arg.replace(/(\\*)"/g, '$1$1\\"'); | |
// Sequence of backslashes followed by the end of the string | |
// (which will become a double quote later): | |
// double up all the backslashes | |
arg = arg.replace(/(\\*)$/, '$1$1'); | |
// All other backslashes occur literally | |
// Quote the whole thing: | |
arg = `"${arg}"`; | |
// Escape meta chars | |
arg = arg.replace(metaCharsRegExp, '^$1'); | |
// Double escape meta chars if necessary | |
if (doubleEscapeMetaChars) { | |
arg = arg.replace(metaCharsRegExp, '^$1'); | |
} | |
return arg; | |
} | |
module.exports.command = escapeCommand; | |
module.exports.argument = escapeArgument; | |