Javascript 如果捕获组与字符串匹配,则使用正则表达式
我需要建立一个简单的脚本来断字罗马尼亚话。我见过几个,他们没有正确地执行规则Javascript 如果捕获组与字符串匹配,则使用正则表达式,javascript,regex,regex-group,Javascript,Regex,Regex Group,我需要建立一个简单的脚本来断字罗马尼亚话。我见过几个,他们没有正确地执行规则 var words = "arta codru"; 规则:如果两个辅音位于两个元音之间,则它们在音节之间分开,除非它们属于此数组,在这种情况下,两个辅音都移动到第二个音节: var exceptions_to_regex2 = ["bl","cl","dl","fl","gl","hl","pl","tl","vl","br","cr","dr","fr","gr","hr","pr","tr","vr"]; 预期
var words = "arta codru";
规则:如果两个辅音位于两个元音之间,则它们在音节之间分开,除非它们属于此数组,在这种情况下,两个辅音都移动到第二个音节:
var exceptions_to_regex2 = ["bl","cl","dl","fl","gl","hl","pl","tl","vl","br","cr","dr","fr","gr","hr","pr","tr","vr"];
预期结果:ar ta co dru
迄今为止的守则:
现在我需要这样做:
if (exceptions_to_regex2.includes($2+$3)){
words.replace(regex2, '$1-');
}
else {
words.replace(regex2, '$1$2-');
}
显然,它不起作用,因为我不能像使用正则变量那样使用捕获组。请提供帮助。您可以将您的异常编码为一个模式,在一个元音后检查是否匹配,然后停止匹配,或者您仍然可以在另一个元音前使用任何其他辅音,并在以下情况后立即使用连字符替换为对整个匹配的反向引用:
.replace(/[aeiou](?:(?=[bcdfghptv][lr])|[bcdfghj-nprstvwxy](?=[bcdfghj-nprstvwxy][aeiou]))/g, '$&-')
如果需要不区分大小写的匹配,请在g
之后添加i
修饰符
看
详细信息
-元音[aeiou]
-启动非捕获组:(?:
-一种正向前瞻,要求异常字母簇立即出现在当前位置的右侧(?=[bcdfghptv][lr])
-或|
-辅音[bcdfghj nprstvwxy]
-后跟任何辅音和元音(?=[bcdfghj nprstvwxy][aeiou])
-非捕获组结束)
替换模式中的
$&
是整个匹配值的占位符(在regex101中,$0
只能在此时使用,因为网站不支持特定于语言的替换模式)。尝试.replace(/[aeiou](?:(?=[bcdfghptv][lr])[bcdfghj nprstvwxy](?=[bcdfghj nprstvwxy][aeiou])/g、 “$&-”)
,请参阅。谢谢。如果你能补充一句,我会接受的。坦白地说,我甚至没有想过要这样看待它。我想找到一种将捕获的组用作js变量的方法
.replace(/[aeiou](?:(?=[bcdfghptv][lr])|[bcdfghj-nprstvwxy](?=[bcdfghj-nprstvwxy][aeiou]))/g, '$&-')