【发布时间】:2020-11-06 16:40:48
【问题描述】:
我需要使用分隔符(在我的示例中为 =)拆分字符串,除非此字符在引号或双引号内
我成功地使用\=+(?=(?:(?:[^']*'){2})*[^']*$) 在单引号内或在双引号内使用\=+(?=(?:(?:[^"]*"){2})*[^"]*$) 成功地做到了这一点,但不是两者都适用,什么是合适的正则表达式?
奖励:如果字符不在字符 ` 内时也可以拆分,那就完美了:)
我需要什么:
编辑: 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);
【问题讨论】:
-
为什么不尝试另一种方法来拆分字符串。
-
如果你有一个,我会全神贯注:)
-
你能把你的测试字符串作为代码发布吗?
-
这是一个很难回答的问题。 See more discussion here
-
我将测试字符串添加为代码
标签: javascript regex string quotes double-quotes