为什么我不能使用(?!y)苹果,如果我想排除" yapple"?
在一个单词之前(?!y)的替代方法是什么?
答案 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>");
希望这会对你有帮助!