我如何匹配每个单词的第一个字母,除了花括号中的单词与正则表达式

How can I match first letter of every word except words in braces with Regex

本文关键字:单词 正则表达式 何匹配 第一个      更新时间:2023-09-26

我一直在尝试这样做。我可以匹配每个单词的第一个字母,但是不能排除用大括号括起来的单词。

例如:

我做不到,请帮助我。

所以这应该匹配- I, c, t, p, m - only。

使用'b'w只匹配单词的首字母,不排除大括号中的单词。我也试过消极的向前看,但似乎我不能正确地做:

(?!'(()'))'b'w

我也有unicode的问题。使用(?:^| )[a-z]{1}'b'w只匹配拉丁字母,有时会有不同的unicode,例如:

我是(某人)。

在这种情况下,regex将只匹配I, as,而不是。由于

这个只捕获单词的第一个字母:

(& lt; = [^ () ' b ' w

这是一个积极的回顾:(来自https://regex101.com/)

确保给定的模式匹配,并在表达式中的当前位置结束。不占用任何字符。

/(& lt; = foo)酒吧/

foobar匹配Foobaz不匹配

对于非拉丁字符,i无法帮助您

不同的东西需要考虑。

  1. 首先你需要定义你的字母,也可以是非拉丁字母。请看下面的回答和评论。因此,为了匹配字母,我们使用['u00C0-'u1FFF'u2C00-'uD7FF'w]

  2. 当你想在Javascript中这样做时,regex是有限的。不能使用字边界'b,因为它与指定的字母范围不匹配。向后看不可用。我们需要使用指定字母的否定类。像(?:^|[^''u00C0-'u1FFF'u2C00-'uD7FF'w-])这样的"词边界"。这里我还添加了',以避免匹配,如can't

  3. 使用预先检查来检查是否在括号外:(?![^(]*'))

整个模式看起来就像

(?:^|[^''u00C0-'u1FFF'u2C00-'uD7FF'w])(['u00C0-'u1FFF'u2C00-'uD7FF'w])(?![^(]*'))

在regex101

查看这段代码和演示