1

我有以下正则表达式:

((^|[^a-zA-ZäöåüßÄÖÅÜ])'+targetword+'(?![a-zA-ZäöåüßÄÖÅÜ]))(?![^<]*(?:<\/script|>))

我正在使用它来查找targetword并从中建立链接,但前提是该单词不是另一个单词的一部分。

编辑:正则表达式用于 JavaScript,在 RegExp 对象中。

换句话说,'the'将被链接,但o'the'r'the'apy不会。

问题是上面的表达式还包括链接中的前导空格。所以'the'变成' the'链接文本。

我已经找到了一些解决方案来查找和排除这个站点中的前导空格,但是我还没有找到将它们嵌入到上述表达式中的方法,因为正则表达式真的不是我的强项。

4

3 回答 3

1

基本上你只需要定义空格不属于你的匹配组:

(?:(?:^|[^a-zA-ZäöåüßÄÖÅÜ])\s*(targetword)(?![a-zA-ZäöåüßÄÖÅÜ]))(?![^<]*(?:<\/script|>))

应该诀窍(注意前面的 MATCHED,但 EXCLUDED 空格)targetword当然用您的变量替换 targetword。

于 2013-08-29T18:57:51.080 回答
1

此正则表达式与您似乎正在寻找的内容并不完全相同,但它可能会更好。

"\b" + targetword + "\b"

\b 的意思是这个词应该是独立的。这还包括符号、空格和数字。

如果这不是您要找的,给您带来的不便,我们深表歉意。

于 2013-08-29T19:10:37.733 回答
0

您可以使用"\b" + targetword + "\b"and 这将适用于大多数情况,但是这将匹配单词donald和字符串O'Donald 或匹配Sarah字符串Sarah's car is broken

我会使用向后看和向前看来验证

  • 前面的字符是空格、字符串开头或可接受的标点符号
  • 尾随字符是空格、字符串结尾或可接受的标点符号

这些允许的字符可以根据您的实际用例进行定制。

"(?<=[\s",.]|^)" + targetword + "(?=[\s",.\r\n]|$)"

在此处输入图像描述

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    [\s",.]                  any character of: whitespace (\n, \r,
                             \t, \f, and " "), '"', ',', '.'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    ^                        the beginning of the string
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  targetword               'targetword'
--------------------------------------------------------------------------------
  (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
    [\s",.\r\n]              any character of: whitespace (\n, \r,
                             \t, \f, and " "), '"', ',', '.', '\r'
                             (carriage return), '\n' (newline)
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    $                        before an optional \n, and the end of
                             the string
--------------------------------------------------------------------------------
  )                        end of look-ahead
于 2013-08-30T04:00:31.287 回答