我正在使用JavaScript正则表达式使用分隔符(&&,;,|)拆分多个命令,以确定命令的边界。这对于除最后一个命令以外的所有命令都适用。作为一种技巧,我可以在命令末尾添加新行以捕获最后一个组。这是代码。
const regex = /(.*?)(&&|\||;|\r?\n)/gm
// The EOL is a hack to capture the last command
const test = 'read -p test TEST && echo | ls -lh ~/bin; test | echo\n'
let m
while ((m = regex.exec(test)) !== null) {
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match.trim()}`)
})
}
有没有办法更改正则表达式,以便它可以捕获最后一组而不被黑客入侵?
答案 0 :(得分:0)
此正则表达式应解决您的问题:/(.*?)(&&|\||;|\r|$)/gm
添加$
使其也匹配“行尾”。
答案 1 :(得分:0)
您可以使用(.+?)(&&|\||;|$)
和$
来声明行的结尾,并使用.+?
来匹配除换行符以外的任何字符1次或多次,以防止匹配空字符串。 / p>
如果您还想匹配逗号,则可以将其添加到替换中。
请注意,您正在使用2个捕获组。如果您不使用第2组中的数据,则可以使其不捕获(?:
const regex = /(.+?)(&&|\||;|$)/gm;
const test = 'read -p test TEST && echo | ls -lh ~/bin; test | echo\n';
let m;
while ((m = regex.exec(test)) !== null) {
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match.trim()}`)
})
}