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, '$&-')