向正则表达式添加例外 javascript

add exception to a regex javascript

我正在制作罗马尼亚语断字脚本。 上一个问题(已解决)在这里: 如果你想看一看 这是处理不是双元音或三元音的元音的正则表达式:

(?:[aeiou])(?=[aeiou][bcdfghjklmnprstvwxyz]{0,})

我似乎想不出如何为此添加两个例外:"ii" 在最终位置保持在一起。 "ii" 组前面通常有一个辅音字母,除了 "copiii" 连字符 -pi-ii https://regex101.com/r/ew4JUh/1 预期结果,除了单词 "copiii" 始终是辅音(或更多)后跟同一音节中的 "ii" 组 muschii = mus-chii pomii = po-mii

编辑:

以防万一有人需要做同样的事情,您可以在这里找到到目前为止的脚本:

https://playcode.io/156923

大部分时间都有效。

它按照我的理解执行规则。唯一的问题是可能有一半的词不符合规则。因此,尽管脚本做了它应该做的事情,但它无法处理无法预料的异常。

例如:

avion = a-vi-on

iodat = io-dat

piatra = pia-tra

钻石=di-a-曼特

以此类推,无穷无尽。 我不相信有任何规则可以确定元音何时被分组为双元音或三元音以及它们何时属于不同的音节。

从好的方面来说,我知道的语法和正则表达式比以往任何时候都多:)

非常感谢 Wiktor 的大力帮助。

您可以使用

(?!ii\b)[aeiou](?=[aeiou])

参见regex demo

请注意,正向前看末尾的 [bcdfghjklmnprstvwxyz]{0,} 是多余的,是否需要可选模式都没有区别。

详情

  • (?!ii\b) - 如果紧挨着当前位置的右侧有 ii 后跟单词边界
  • ,则匹配失败的否定前瞻
  • [aeiou] - 元音
  • (?=[aeiou]) - 后面必须跟另一个元音。