我是regexp的新手,并尝试匹配该表达式,直到出现特殊字符为止。如果匹配项在特殊字符之前存在,则将其返回,否则不返回任何内容。
这里是demo。
我的目标是,如果在“->”特殊字符之前找到匹配项,则不返回任何内容。它不应该在'->'特殊字符之后返回匹配项。
Regexp:/()()(\[[^\]]+\])\s*(-[->])(.*)/g
//在第三组中将返回实际结果
例如数据:
[AAA]-> [BBB]-> [CCC] //在这种情况下需要匹配[AAA]
AAA-> [BBB]-> [CCC] //在这种情况下,不返回[BBB],而是像特殊字符'->'之前一样不返回任何内容,
请帮助我。预先感谢。
答案 0 :(得分:2)
这是您想要的吗?
^\[[^\]]+\](?=\h*->)
说明:
^ # beginning of string
\[ # opening squarre bracket
[^\]]+ # 1 or more any character that is not closiing bracket
\] # closing bracket
(?= # start positive lookahead, make sure we have after:
\h* # 0 or more horizontal spaces
-> # literally ->
) # end lookahead
答案 1 :(得分:2)
答案 2 :(得分:1)
我不完全理解问题,只是在此处复制一些猜测,可能使您更接近要完成的任务:
^()()((\[[^\]]*\]))\s*->(.*)
()()(\[[^\]]+\])\s*->(\s*\[[^\]]+\]\s*->\s*\[[^\]]+\])
()()(\[[^\]\r\n]+\])\s*->\s*(\[[^\]\r\n]+\]\s*->\s*\[[^\]\r\n]+\])
const regex = /^()()((\[[^\]]*\]))\s*(->)(.*)/gm;
const str = `[AAA] -> [BBB] -> [CCC]
AAA -> [BBB] -> [CCC]`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
jex.im可视化正则表达式: