JavaScript正则表达式替换字符串中以#开头的单词
我使用下面的函数将字符串中以#开头的单词替换为额外#数据对象中名称完全相同的变量JavaScript正则表达式替换字符串中以#开头的单词,javascript,regex,node.js,Javascript,Regex,Node.js,我使用下面的函数将字符串中以#开头的单词替换为额外#数据对象中名称完全相同的变量 var messageString = "The folder #folder_name was removed from the workspace #workspace_name by #user_name" var re = /(?:^|\W)#(\w+)(?!\w)/g, match; while (match = re.exec(messageString)) { messageString = me
var messageString = "The folder #folder_name was removed from the workspace #workspace_name by #user_name"
var re = /(?:^|\W)#(\w+)(?!\w)/g, match;
while (match = re.exec(messageString)) {
messageString = messageString.replace(match[0],extra_data[match[1]]);
console.log("I am here--------------------------------------------->1");
console.log(messageString);
}
控制台日志
I am here--------------------------------------------->1
The folder23545 was removed from the workspace #workspace_name by #user_name
I am here--------------------------------------------->1
The folder23545 was removed from the workspace127 by #user_name
上面的代码仅替换2个实例,有时会占用空白,正如您在Workspace227中看到的那样。
我做错了什么?我想
replace
在这里更合适:
result = messageString.replace(/#(\w+)/g, function(_, $1) { return extra_data[$1] })
或者,仅替换以#
开头的单词:
我想
replace
在这里更合适:
result = messageString.replace(/#(\w+)/g, function(_, $1) { return extra_data[$1] })
或者,仅替换以#
开头的单词:
- 您正在更改循环中的字符串
使用re.exec
属性存储开始下一次匹配的位置。当您将“#工作区_名称”替换为“127”时,lastIndex
会变短messageString
- 开始时您正在消耗空间
var messageString = "The folder #folder_name was removed from the workspace #workspace_name by #user_name"
var re = /(^|\W)#(\w+)/g, match;
var changedString = messageString;
while (match = re.exec(messageString)) {
changedString = changedString.replace(match[0], match[1] + extra_data[match[2]]);
}
- 您正在更改循环中的字符串
使用re.exec
属性存储开始下一次匹配的位置。当您将“#工作区_名称”替换为“127”时,lastIndex
会变短messageString
- 开始时您正在消耗空间
var messageString = "The folder #folder_name was removed from the workspace #workspace_name by #user_name"
var re = /(^|\W)#(\w+)/g, match;
var changedString = messageString;
while (match = re.exec(messageString)) {
changedString = changedString.replace(match[0], match[1] + extra_data[match[2]]);
}
前瞻的意义是什么?只需使用thg435的解决方案。这对我来说是最有意义的。前瞻的意义是什么?只需使用thg435的解决方案。这对我来说是最有意义的。我可能会进行检查以确保有一个值+1@thg435谢谢就像一个符咒:)我可能会有一个检查,以确保有一个值+1@thg435谢谢工作就像一个符咒:)