回答你原来的问题:
您可以明确地编码"之前没有任何内容(字符串的开头)或非y字符"
/(?:^|[^y])apple/
Run Code Online (Sandbox Code Playgroud)
或者根据你想做的事情,你可以使用单词边界匹配
/\bapple/
Run Code Online (Sandbox Code Playgroud)
\b 匹配字母数字字符(\ w)和非字母数字字符(\ W)之间的边界
其他环境(如Perl)有时会内置这种后置功能:
/(?=)/ positive lookahead
/(?!)/ negative lookahead
/(?<=)/ positive lookbehind
/(?<!)/ negative lookbehind
Run Code Online (Sandbox Code Playgroud)
至于不替换pre内部的东西的问题
如果您执行两个步骤可能会更容易:首先<pre>从字符串中删除标记内的所有文本,然后执行替换,然后在完成后添加隐藏文本.