正则表达式:按字符拆分字符串,除非在引号或双引号内
Regex: split string by character except if inside quotes or double quotes
我需要使用分隔符(在我的示例中为 =)拆分字符串,除非该字符在引号或双引号内
我使用 \=+(?=(?:(?:[^']*'){2})*[^']*$)
在单引号内成功完成,或使用 \=+(?=(?:(?:[^"]*"){2})*[^"]*$)
在双引号内成功完成,但不是两者都成功,合适的 RegExp 是什么?
奖金:如果当字符不在字符 ` 内时它也可以拆分,那就完美了:)
我需要什么:
编辑: Javascript 重现示例 ( https://jsfiddle.net/cgnorhm0/ )
function splitByCharExceptInsideString(str, delimiterChar) {
// split line by character except when it is inside quotes
const escapedChar = delimiterChar.replace(/[-[\]{}()*+!<=:?./\^$|#\s,]/g, "\$&");
const regSplit = new RegExp(escapedChar + `+(?=(?:(?:[^']*'){2})*[^']*$)`);
const splits = str.split(regSplit);
return splits ;
}
const testStr = `image.inside {
sshagent(credentials: ['ssh-creds']) {
env.GIT_SSH_COMMAND="ssh -T -o StrictHostKeyChecking=no"
env.GIT_SSH_COMMAND2='ssh -T -o StrictHostKeyChecking=no'
}
}`;
const delimiterChar = '=';
const splitLs = splitByCharExceptInsideString(testStr,delimiterChar);
console.log(splitLs);
前瞻和后视不消耗字符,因此您可以同时使用多个。你可以使用
\=+(?=(?:(?:[^"]*"){2})*[^"]*$)(?=(?:(?:[^']*'){2})*[^']*$)(?=(?:(?:[^`]*`){2})*[^`]*$)
下面的正则表达式找到 =
个不在 `、" 或 ' 对内的字符。
const regex = /=(?=.*)(?=(?:'.*?'|".*?"|`.*?`).*?)/;
我需要使用分隔符(在我的示例中为 =)拆分字符串,除非该字符在引号或双引号内
我使用 \=+(?=(?:(?:[^']*'){2})*[^']*$)
在单引号内成功完成,或使用 \=+(?=(?:(?:[^"]*"){2})*[^"]*$)
在双引号内成功完成,但不是两者都成功,合适的 RegExp 是什么?
奖金:如果当字符不在字符 ` 内时它也可以拆分,那就完美了:)
我需要什么:
编辑: Javascript 重现示例 ( https://jsfiddle.net/cgnorhm0/ )
function splitByCharExceptInsideString(str, delimiterChar) {
// split line by character except when it is inside quotes
const escapedChar = delimiterChar.replace(/[-[\]{}()*+!<=:?./\^$|#\s,]/g, "\$&");
const regSplit = new RegExp(escapedChar + `+(?=(?:(?:[^']*'){2})*[^']*$)`);
const splits = str.split(regSplit);
return splits ;
}
const testStr = `image.inside {
sshagent(credentials: ['ssh-creds']) {
env.GIT_SSH_COMMAND="ssh -T -o StrictHostKeyChecking=no"
env.GIT_SSH_COMMAND2='ssh -T -o StrictHostKeyChecking=no'
}
}`;
const delimiterChar = '=';
const splitLs = splitByCharExceptInsideString(testStr,delimiterChar);
console.log(splitLs);
前瞻和后视不消耗字符,因此您可以同时使用多个。你可以使用
\=+(?=(?:(?:[^"]*"){2})*[^"]*$)(?=(?:(?:[^']*'){2})*[^']*$)(?=(?:(?:[^`]*`){2})*[^`]*$)
下面的正则表达式找到 =
个不在 `、" 或 ' 对内的字符。
const regex = /=(?=.*)(?=(?:'.*?'|".*?"|`.*?`).*?)/;