【问题标题】:How to find and replace text that is between certain keywords with javascript?如何使用javascript查找和替换某些关键字之间的文本?
【发布时间】:2011-12-29 16:22:00
【问题描述】:

例如我有这个文本

"!?vake 7EnEebjP8jXf JFyd5hpIVa6B  !?vake".

开始和结束关键字是“!?vake”,我想检索关键字之间的加密内容,解密并替换它。

替换前的html代码为:

<span class="messageBody" data-ft="{&quot;type&quot;:3}">‎!?vake 7EnEebjP8jXf JFyd5hpIVa6B
Fu63LH23dAiB !?vake</span>

解密后:

<span class="messageBody" data-ft="{&quot;type&quot;:3}">‎i am the decrypted text</span>

在不知道加密文本的具体元素的情况下,替换应该在整个 html 文档中起作用。

【问题讨论】:

  • 您想“解密”DOM 的每个节点中的文本?这不是个坏主意吗?
  • 你为什么要这样做?由于它是 JS,这意味着您正在客户端上进行解密,这意味着您已将加密数据作为解密方法发送给客户端。你已经安装了一个安全的银行保险库,然后把钥匙贴在门上……
  • 这让人想起“geico 可以为您节省汽车保险的费用吗?XYZ 是个坏主意吗?”广告。
  • @MarcB,您的评论不适用; OP 不控制目标页面。这是一个 userscript 应用程序/问题。
  • @MarcB 加密和解密脚本使用greasemonkey在用户的浏览器上运行。加密和解密密钥将存储在用户信任的空间中,并将使用xmlhttprequest调用。所以钥匙不在门上。

标签: javascript jquery encryption userscripts


【解决方案1】:

您可以使用 RegExp 实现此目的。在此处查看演示:http://jsfiddle.net/diode/KVqJS/4/

var body = $("body").html();

var matched;
while ((matched = body.match(/!\?vake (.*?) !\?vake/))) {
    if(matched.length > 1){
        body = body.replace(/\!\?vake (.*) \!\?vake/, decode(matched[1]));
    }

}

$("body").html(body);

function decode(encoded) {
    return "decoded " + encoded;
}

【讨论】:

  • 我刚试过你的代码,它工作得很好。我只是想知道如何!/vake 可以被变量替换。我想搜索一组关键字。这个代码应该在 facebook 等社交网络的用户脚本中运行,因此每个用户的加密密钥都不同。因此,如果我的墙上有 10 个来自不同用户的帖子,则会找到一组 10 个不同的关键字来解密他们的文本有 10 个不同的键。
  • 我也想要一些链接来阅读正则表达式,这样我就可以学习了。谢谢
  • 这里是 JS 的正则表达式教程:regular-expressions.info/javascript.html 这里是一个帮助您测试正则表达式的站点:gskinner.com/RegExr(如果您使用它,专门用于 PHP 中的 preg 函数,是fullonrobotchubby.co.uk/random/preg_tester)
  • @vkefallinos :网上有大量资源可用于学习 RegExp。要在 RegExp 中使用变量,您必须在 Javascript 中使用 new RegExp()。请看这个线程。 stackoverflow.com/questions/487509/….
【解决方案2】:

您可以使用正则表达式来查找(和替换)数据。

这是一个快速而肮脏的 JSFiddle:http://jsfiddle.net/z8rVc/1/

不过,我相信有人会想出一个更优雅的方法。

【讨论】:

  • 这也有效。谢谢 var code = $("body").html().match(/!\?vake (.*?) !\?vake/); var allcode = 代码[0]; var 内码 = 代码 [1]; var decryptcode = 内码 + '解密'; var newCode = $("body").html().replace(allcode, decryptcode); $("body").html(newCode);警报(解密代码);
【解决方案3】:

您可以在JS中使用以下正则表达式搜索和替换代码:

var a = "!?vake 7EnEebjP8jXf JFyd5hpIVa6B  !?vake";
var b = a.replace(/\!\?vake(.*)\!\?vake/g, '$1');
/// b contains your string between the keywords which you can decrypt as required.

【讨论】:

  • 然后你可以在变量“b”上运行你的安全解密函数。哦等等。
  • @GeekTantra 使用您的代码必须有人已经知道加密文本。我想搜索一些关键字之间的加密文本,找到它,解密并替换它。
  • 您需要使用 jQuery 在所有节点上执行此操作。它会降低性能,而且不建议在客户端解密。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2012-05-31
  • 2014-08-15
  • 1970-01-01
  • 2016-03-31
  • 2015-12-01
  • 1970-01-01
相关资源
最近更新 更多