gpt4 book ai didi

javascript - RegExp 忽略
 标签之间的所有内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:24:51 24 4
gpt4 key购买 nike

尝试解析一些内容(没有可用的 DOM - 或 DOM 解析器,例如 jQuery、Cheerio)以用图像替换一些单词/符号(基本上是情感),但想忽略 <code></code> 之间的所有内容和 <pre></pre>这个例子在替换所有情绪方面效果很好,但不会忽略代码和前置标签 http://jsbin.com/odARehI/5/edit?js,console

如果您运行脚本,您将看到第一个打印输出在代码标记之前,第二个打印输出在代码标记之后。

将欣赏另一组眼睛在那个模式上。谢谢

// see link for a list of the emotions to parse
var pattern = /&gt;:\)|\([\w~]+\)|\\[:]?[od]\/|[:;\|bBiIxX8\(\)\]][=\-"^:]?[)>$&|\w\(\)*@#?]?[)>$&|\w\(\)*@#?]/g;

我尝试了一些没有弄乱原始匹配的方法。

对于 Don't-parse-html-with-regex-police-department:这是在服务器端运行,我目前没有 DOM 解析器的奢侈。

谢谢。

更新:对于要忽略的 RegExp 解决方案 <code>感谢github/frissdiegurke,标签看到了这个简洁的解决方案在这个commit

/(^|<\/code>)([^<]*|<(?!code>))*(<code>|$)/g

最佳答案

如果没有 DOM 解析,您将遇到会失败的边缘情况。但是,这应该适合您。

给定这个 HTML:

Hello :) <pre>Wassup :)</pre> Maybe :) <code>:) Foo</code> :) Bar

使用这段代码:

var blocks = [];
html = html.replace(/(?:<pre>.*?<\/pre>|<code>.*?<\/code>)/g, function (match) {
blocks.push( match );
return '__BLOCK__';
});

html = html.replace(/:\)/g, 'SMILE');

html = html.replace(/__BLOCK__/g, function () {
return blocks.shift();
});

产生:

Hello SMILE <pre>Wassup :)</pre> Maybe SMILE <code>:) Foo</code> SMILE Bar

只需调整 /:\)/g 替换即可,但您需要它。

关于javascript - RegExp 忽略 <code> 和 <pre> 标签之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21372302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com