替代(?!y)但在单词之前

时间:2011-11-21 16:09:28

标签: javascript regex

为什么我不能使用(?!y)苹果,如果我想排除" yapple"?

在一个单词之前(?!y)的替代方法是什么?

http://jsfiddle.net/ksevelyar/SbCCx/4/

3 个答案:

答案 0 :(得分:5)

回答您的原始问题:

你可以明确地编码“之前没有任何东西(字符串的开头)或非y字符”

/(?:^|[^y])apple/

或根据您的想法,您可以使用单词边界匹配

/\bapple/

\b匹配字母数字字符(\ w)和非字母数字字符(\ W)之间的边界


其他环境(如Perl)有时会内置这种后置功能:

/(?=)/   positive lookahead
/(?!)/   negative lookahead
/(?<=)/  positive lookbehind
/(?<!)/  negative lookbehind

关于不替换前内容的问题

如果您执行两个步骤可能会更容易:首先从字符串中删除<pre>标记内的所有文本,然后执行替换,然后在完成后添加隐藏文本。

答案 1 :(得分:3)

(?!...)是一个先行者,它会超越你的正则表达式的末尾来寻找(或者找不到,在这种情况下,因为它是一个负面的前瞻)字符......

你可能想写一个lookbehind,或(?<!...)。像/(?<!y)apple/之类的东西,但javascript正则表达式引擎不支持它们。

但是看到missno的替代方案的答案,但很难在没有更好地理解你想要做什么的情况下建议其中一个。

答案 2 :(得分:1)

JavaScript的regexp不是最好的... 这是一个(非常)肮脏的解决方法,可能适合你:

str = str.replace(/<pre>apple<\/pre>/g, "#DUMMY#");
str = str.replace(/apple/g, "sword");
str = str.replace(/#DUMMY#/g, "<pre>apple</pre>");

http://jsfiddle.net/pZ3c9/

希望这会对你有帮助!