RegEx negative-lookahead 和 behind 查找未嵌入包装器中的字符

RegEx negative-lookahead and behind to find characters not embedded within a wrapper

我想匹配未被明确定义的字符串包装器包围的 strings/characters。在这种情况下,包装器是字符串左侧的“@L@”和字符串右侧的“@R@”。

以下面的字符串为例:

This is a @L@string@R@ and it's @L@good or ok@R@ to change characters in the next string

我希望能够搜索(任意数量的字符)以根据具体情况进行更改。例如:

  1. 搜索 "in",将匹配两次 - 单词 'in' 和最后一个单词 'string'.
  2. 中包含的 'in'
  3. 搜索 "g",应该在单词 'change' 和最后的单词字符串中找到(但不是包装器中包含的字符串的第一次出现)。

我有点熟悉前瞻的工作原理,因为它可以识别匹配项,并且 return 匹配条件不会作为已识别匹配项的一部分。 不幸的是,我不知道该怎么做。

我也在 http://regexpal.com/ 玩过这个,但似乎找不到任何有用的东西。我为 iOS 找到的例子有问题,所以也许 javascript 测试仪有点不同。

我从我之前问的一个问题中得到了一些指导,这似乎几乎相同但差异很大,这意味着我无法弄清楚如何重用它:

有什么想法吗?

首先将所有@L@@R@块,然后使用交替运算符|从剩余的字符串中匹配字符串in。要区分匹配项,请将 in 放在捕获组中。

@L@.*?@R@|(in)

DEMO

使用否定的先行断言。这将匹配子字符串 in 仅当它没有跟随 @L@@R@,零次或多次并且进一步跟随 @R@。所以这将匹配 @L@@R@ 块中不存在的所有 in

in(?!(?:(?!@[RL]@).)*@R@)

DEMO