Javascript中的Lookbehind:don';如果前面有多个字符,则不匹配

Javascript中的Lookbehind:don';如果前面有多个字符,则不匹配,javascript,regex,Javascript,Regex,看 我想在这种情况下匹配Bb和Dd Aa : Bb, Cc : Dd 但在本例中,当有{和几个字符时,情况并非如此 {Aa : Bb, Cc : Dd 我尝试了这个正则表达式,但是+有错误,我找不到正确的语法: (?<!{[A-Za-z]+)(?<=:\s)[A-Za-z][a-z]* (?通过对lookback的支持进行测试,您尝试的模式(?)在这两种情况下都匹配,因为这两种断言在Bb和Dd之前的位置都是正确的 有:\s直接在左边,没有{[A-Za-z]+直接在左边,因为两者

我想在这种情况下匹配Bb和Dd

Aa : Bb, Cc : Dd
但在本例中,当有{和几个字符时,情况并非如此

{Aa : Bb, Cc : Dd
我尝试了这个正则表达式,但是+有错误,我找不到正确的语法:

(?<!{[A-Za-z]+)(?<=:\s)[A-Za-z][a-z]*

(?通过对lookback的支持进行测试,您尝试的模式
(?)在这两种情况下都匹配,因为这两种断言在
Bb
Dd
之前的位置都是正确的

:\s
直接在左边,没有
{[A-Za-z]+
直接在左边,因为两者都不可能,因此断言为真

关于Javascript中对lookback的支持,请注意


不使用lookarounds的一个选项是使用一个具有替代性的捕获组,首先排除您不想要的内容,然后在组中捕获您想要保留的内容

{[A-Za-z].*|:\s([A-Za-z][a-z]*)
模式匹配

  • {[A-Za-z].
    匹配
    {
    ,一个字符A-Za-z和行的其余部分
  • |
  • :\s
    匹配
    和空白字符
  • ([A-Za-z][A-z]*)
    捕获组1,匹配字符A-Za-z,后跟可选字符A-z

const regex=/{[A-Za-z].*.:\s([A-Za-z][A-z]*)/g;
[
“Aa:Bb,Cc:Dd”,
{Aa:Bb,Cc:Dd'
].forEach(str=>{
const result=Array.from(str.matchAll(regex),m=>m[1]);
如果(结果[0]!==未定义){
控制台日志(结果);
}

})
正如您所知,lookbehind在JS中不受普遍支持。您的意思是
(?())吗?另外,您的regex101链接使用的是PHP的PCRE2,但您的问题被标记为Javascript。您可以排除
{[A-Za-z]+
将其与行的其余部分进行匹配。使用替代选项,您可以捕获捕获组1中的值。
{[a-Za-z].*.\s([a-Za-z][a-z]*)
请参阅@Thefourthbird您的解决方案可以发布。