我正在尝试编写一个正则表达式,它将找到不以“my:”开头的花括号之间的所有值。例如,我想捕获{this}
但不捕获{my:monkey}
。
捕捉一切的模式是:
\{([^\}]*)\}
我无法让它发挥作用。我到目前为止最接近的一次是:
\{[^my:]*([^\}]*)\}
这会失败,因为它只会忽略以“m”,“y”或“:”开头的标签。
我确信有一个命令我忽略了把“我的:”视为一个块......
(注意:必须适用于Javascript)
答案 0 :(得分:9)
答案 1 :(得分:0)
您可以这样做:
var input = "I want to capture {this} but not {my:monkey}";
var output = input.replace(/{(my:)?([^}]*)}/g, function($0, $1, $2) {
return $1 ? $0 : "[MATCH]";
});
// I want to capture [MATCH] but not {my:monkey}
答案 2 :(得分:0)
{(?!my:)(.*?)}
适用于正则表达式:http://preview.tinyurl.com/nkcpoy7
答案 3 :(得分:0)
总结如下:
// test match thing_done but not some_thing_done (using nagative lookbehind)
console.log(/(?<!some_)thing_done/.test("thing_done")); // true
console.log(/(?<!some_)thing_done/.test("some_thing_done")); // false
// test match thing_done but not think_done_now (using nagative lookahead)
console.log(/thing_done(?!_now)/.test("thing_done")); // true
console.log(/thing_done(?!_now)/.test("thing_done_now")); // false
// test match some_thing_done but not some_thing (using positive lookbehind)
console.log(/(?<=some_)thing_done/.test("thing_done")); // false
console.log(/(?<=some_)thing_done/.test("some_thing_done")); // true
// test match thing_done but not think_done_now (using positive lookahead)
console.log(/thing_done(?=_now)/.test("thing_done")); // false
console.log(/thing_done(?=_now)/.test("thing_done_now")); // true
对话版本:
I need match some_thing_done not thing_done:
Put `some_` in brace: (some_)thing_done
Then put ask mark at start: (?some_)thing_done
Then need to match before so add (<): (?<some_)thing_done
Then need to equal so add (<): (?<=some_)thing_done
--> (?<=some_)thing_done
?<=some_: conditional back equal `some_` string