Javascript中的Lookbehind:don';如果前面有多个字符,则不匹配
看 我想在这种情况下匹配Bb和DdJavascript中的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]+直接在左边,因为两者
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您的解决方案可以发布。