提问人:Nicolas Vuillamy 提问时间:7/17/2020 最后编辑:Nicolas Vuillamy 更新时间:7/17/2020 访问量:456
正则表达式:按字符拆分字符串,除非在引号内或双引号内 [duplicate]
Regex: split string by character except if inside quotes or double quotes [duplicate]
问:
我需要使用分隔符字符(在我的示例中为 =)拆分字符串,除非此字符位于引号或双引号内
我成功地在单引号内使用 ,或在双引号内使用 ,但不能同时使用,什么是合适的正则表达式?\=+(?=(?:(?:[^']*'){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);
答:
1赞
mjrezaee
7/17/2020
#1
“前瞻”和“后视”不消耗字符,因此您可以同时使用多个字符。你可以使用
\=+(?=(?:(?:[^"]*"){2})*[^"]*$)(?=(?:(?:[^']*'){2})*[^']*$)(?=(?:(?:[^`]*`){2})*[^`]*$)
评论
0赞
Mohsen Alyafei
7/17/2020
当引号不匹配时,这将失败,如下所示:'inside = ' and another = '...
0赞
kmaork
7/17/2020
#2
下面的正则表达式查找不在 '、“ 或 ' 对中的字符。=
const regex = /=(?=.*)(?=(?:'.*?'|".*?"|`.*?`).*?)/;
评论
0赞
Nicolas Vuillamy
7/17/2020
不工作 :/imgur.com/a/MLNGfwc
0赞
kmaork
7/17/2020
很奇怪,我使用的是同一个网站,它对我有用......
0赞
kmaork
7/17/2020
你使用的是 javascript 语法吗?
0赞
Nicolas Vuillamy
7/17/2020
您可以保存 Regex101 并发布链接吗?
评论