匹配正则表达式,直到第一次出现特殊字符“->”

时间:2019-10-06 18:11:23

标签: regex regex-lookarounds regex-negation regex-group regex-greedy

我是regexp的新手,并尝试匹配该表达式,直到出现特殊字符为止。如果匹配项在特殊字符之前存在,则将其返回,否则不返回任何内容。

这里是demo

我的目标是,如果在“->”特殊字符之前找到匹配项,则不返回任何内容。它不应该在'->'特殊字符之后返回匹配项。

Regexp:/()()(\[[^\]]+\])\s*(-[->])(.*)/g //在第三组中将返回实际结果

例如数据:

[AAA]-> [BBB]-> [CCC] //在这种情况下需要匹配[AAA]

AAA-> [BBB]-> [CCC] //在这种情况下,不返回[BBB],而是像特殊字符'->'之前一样不返回任何内容,

请帮助我。预先感谢。

3 个答案:

答案 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

Demo

答案 1 :(得分:2)

使用此正则表达式

^\[(.*?)\] ->

并捕获第1组(在大括号内)。

See this regex101 test

答案 2 :(得分:1)

我不完全理解问题,只是在此处复制一些猜测,可能使您更接近要完成的任务:

^()()((\[[^\]]*\]))\s*->(.*)

Demo 1

()()(\[[^\]]+\])\s*->(\s*\[[^\]]+\]\s*->\s*\[[^\]]+\])

Demo 2

()()(\[[^\]\r\n]+\])\s*->\s*(\[[^\]\r\n]+\]\s*->\s*\[[^\]\r\n]+\])

Demo 3

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}`);
    });
}

RegEx电路

jex.im可视化正则表达式:

enter image description here