Javascript 未解析Regexp
我解决了字符串中的标记替换问题,例如: “你好,#名字!”应该用smth来评价,比如:“你好,约翰!” 我测试了基于regexp的算法,效果很好。问题是,当我尝试添加标记以动态搜索时,它不知何故没有被解析。 所有代码:Javascript 未解析Regexp,javascript,regex,Javascript,Regex,我解决了字符串中的标记替换问题,例如: “你好,#名字!”应该用smth来评价,比如:“你好,约翰!” 我测试了基于regexp的算法,效果很好。问题是,当我尝试添加标记以动态搜索时,它不知何故没有被解析。 所有代码: var replaceTags = function(str, tags) { var tagPattern = { search: "(^|[^#])((##)*)#", copy: "$1$2" }; var result;
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;i console.log('result:'+result)代码>这里有一个基于您的代码的代码片段,它似乎可以工作
var str='Hello here#name,room#room的住户!',
标签={
姓名:'Fomin',
房间:'123'
},
tagPattern={search:(^ |[^#])((^##)*)#,副本:“$1$2”},
结果=str,
标记名=对象键(标记),
亚多拉型;
对于(变量i=0;i console.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