2013-08-29 71 views
1

我有以下的正则表达式:正则表达式,包括单词搜索领先的空间

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

,我用它来寻找targetword并链接出来,但只有当这个词是不是一部分的另一个词。

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

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

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

我发现找到在这个非常的网站排除前导空格一些解决方案,但我还没有找到一种方法将它们嵌入到上述表达为正则表达式真的不是我的强项。

回答

1

基本上你只需要定义空格是不是你的对手组的一部分:

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

应招(注意匹配的,但在targetword前排除空格(S)) 更换targetword当然你的变量。

+0

我实现了这个解决方案。 这个正则表达式结合我的链接功能实际上完全剥离了领先空间,但我设法通过在链接创建功能上添加空间来解决这个问题。 –

1

这正则表达式是不完全一样的,你似乎在寻找什么,但它可能工作得更好。

"\b" + targetword + "\b" 

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

如果这不是你正在寻找的东西,抱歉给您带来不便。

+0

这不起作用。JavaScript的'\ b'不能识别重音字母,如“ö”和“å”作为单词字符。所以如果你试图匹配(例如)'\bfoö\ b',它会失败,因为'ö'后面的位置不是一个字边界。 –

0

您可以使用"\b" + targetword + "\b",这将在大多数情况下工作,但是这将字符串Sarah's car is broken在这个词donald,并在串O'Donald或匹配Sarah匹配。

我会使用外表屁股,并期待aheads验证

  • 前面的字符是空格,串的开始,或可接受的标点符号
  • 尾随字符是空格,串的端部,或可接受的标点符号

这些允许的字符可根据您的实际使用情况。

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

enter image description here

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 
+0

OP没有说他使用的是哪种正则表达式,但我非常肯定它是JavaScript,它不支持lookbehinds。 –

+0

谢谢你的详细解释。像@Alan Moore指出的那样,从问题中遗漏了JavaScript,特别是如果这使得解决方案不可行,道歉。 –

相关问题