【问题标题】:Javascript new RegExp(), reading patterns in from JSONJavascript new RegExp(),从 JSON 中读取模式
【发布时间】:2010-12-02 00:53:44
【问题描述】:

我正在尝试创建一个适用于 PHP 和 Javascript 的 bbcode 过滤解决方案。现在我正在研究javascript。我无法让新的 RegExp 构造函数识别我的 json 中的模式。这是重现该问题的一小段示例代码。任何见解将不胜感激!

bbcode.json

{"bbcode_regex": [
      {"regex": "<p>", "bbcode": ""},
      {"regex": "<\/p>", "bbcode": ""},
}

global.js

function html2bbcode(html) {
    var bbcode = html;

    jQuery.get("bbcode.json", {}, function(json) {
        for(var i in json.bbcode_regex) { 
            bbcode = bbcode.replace(new RegExp(json.bbcode_regex[i].regex, "g"), json.bbcode_regex[i].bbcode)
            console.log(new RegExp("/<p>/"));
        }
    }, 'json');

    return bbcode;
}

请注意,我使用的是 FireBug,console.log RegExp 仅用于试验/调试目的。似乎无论我输入什么作为新 RegExp 的第一个参数,它都只记录一个像 {} 这样的空对象。我现在不太担心 PHP,只是担心 javascript。谢谢!

【问题讨论】:

  • 每天都有同样的问题。我希望人们在开始编写 AJAX 之前对其有所了解。
  • 好吧,既然我们在这里,想澄清或链接到一个类似的问题,这将有助于我解决我的问题?
  • 您需要在 JSON 代码中转义 "\",因为它们是简单的字符串。使用 new Regex() 构造函数时,"/" 不需要转义,因此在这种简单的情况下,您不会遇到任何问题。

标签: javascript jquery regex json


【解决方案1】:

线

return bbcode;

将返回未定义,稍后将在完成 ajax 请求时初始化。使用回调:

function html2bbcode(html, callback) {
    var bbcode = html;

    jQuery.get("bbcode.json", {}, function (json) {
        for (var i in json.bbcode_regex) { 
            bbcode = bbcode.replace(new RegExp(json.bbcode_regex[i].regex, "g"), json.bbcode_regex[i].bbcode);
        }
        callback(bbcode);
    }, 'json');

    return false;
}

【讨论】:

  • 不真实。该行返回了未经过滤的 bbcode 版本,因为 Regex 对象未正确实例化。如果我返回 false,那么页面上显示的文本会得到“false”。
  • 没有 aphelionz,Anatoliy 是正确的。您会返回未过滤的内容,因为 html2bbcode() 在 AJAX 回调执行之前返回。您也可能遇到 RegExp 问题,但这并不意味着 Anatoliy 是错误的。
  • 是的,你是对的,它是返回 html,但它和传递给函数是一样的,也就是说,函数对传递的 html 什么都不做。预期行为 - 用正则表达式替换,通过 AJAX 获取。
  • 啊,我的错!我仍然认为我有 RegExp 问题。
  • 我已经测试过,没有发现正则表达式有任何问题:'aa

    '.replace(new RegExp('

    ', "g"), '');按预期返回“aa”。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2022-01-03
  • 2014-09-09
相关资源
最近更新 更多