Javascript 未解析Regexp

Javascript 未解析Regexp,javascript,regex,Javascript,Regex,我解决了字符串中的标记替换问题,例如: “你好,#名字!”应该用smth来评价,比如:“你好,约翰!” 我测试了基于regexp的算法,效果很好。问题是,当我尝试添加标记以动态搜索时,它不知何故没有被解析。 所有代码: var replaceTags = function(str, tags) { var tagPattern = { search: "(^|[^#])((##)*)#", copy: "$1$2" }; var result;

我解决了字符串中的标记替换问题,例如: “你好,#名字!”应该用smth来评价,比如:“你好,约翰!” 我测试了基于regexp的算法,效果很好。问题是,当我尝试添加标记以动态搜索时,它不知何故没有被解析。 所有代码:

    var replaceTags = function(str, tags) {
        var tagPattern = { search: "(^|[^#])((##)*)#", copy: "$1$2" };
        var result;
        var tagNames = Object.keys(tags);
        for(var i = 0; i < tagNames.length; i++) {
            var subDollarEscaped = tags[tagNames[i]].replace(RegExp("\\$", "g"), "$$$$");
            result = str.replace(RegExp(tagPattern.search + tagNames[i], "g"), tagPattern.copy + subDollarEscaped);
        }
        result = result.replace(RegExp("##", "g"), "#");

        return result;
    };
不知何故,字符串没有正确连接。例如,将行更改为该行可以:

result = str.replace(RegExp(tagPattern.search + "name", "g"), tagPattern.copy + subDollarEscaped);
根据doc Object.keys()应该返回字符串数组,但看起来不是。我制作了控制台输出,以确保标记“name”

真的是

(^|[^#])((##)*)#name

所以我真的很困惑。

这里有一个基于您的代码的代码片段,它似乎可以工作

var str='Hello here#name,room#room的住户!',
标签={
姓名:'Fomin',
房间:'123'
},
tagPattern={search:(^ |[^#])((^##)*)#,副本:“$1$2”},
结果=str,
标记名=对象键(标记),
亚多拉型;
对于(变量i=0;iconsole.log('result:'+result)这里有一个基于您的代码的代码片段,它似乎可以工作

var str='Hello here#name,room#room的住户!',
标签={
姓名:'Fomin',
房间:'123'
},
tagPattern={search:(^ |[^#])((^##)*)#,副本:“$1$2”},
结果=str,
标记名=对象键(标记),
亚多拉型;
对于(变量i=0;iconsole.log('result:'+result)
标记名[i]与字符串的不同转换也不起作用。函数从不使用
str
,并且
result
不会设置为自身上的替换以外的值。第三行是否应读取
var result=str还是什么?哦,对不起,在我的真实版本中,它使用str of cause,我已经更改了示例,但现在只为结果分配了上次替换的值…标记名[I]与字符串的不同转换也不起作用。您的函数从未使用
str
,而
result
永远不会设置为除自身的replace之外的值。第三行是否应读取
var result=str还是什么?哦,对不起,在我的真实版本中,它使用了原因str,我已经更改了示例,但现在只为结果分配了上次替换的值…哦,我发现了问题。我真的把结果分配给每个周期的str评估。对不起,你看过代码后面的注释了吗?“不同之处在于,我首先将str赋值给结果,然后将结果赋值给替换的结果。”哦,我发现了问题。我真的把结果分配给每个周期的str评估。对不起,你看过代码后面的注释了吗?不同之处在于我首先将str赋值给结果,然后将结果赋值给替换的结果
tagPattern.search + tagNames[i]
(^|[^#])((##)*)#name