Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式替换字符串中以#开头的单词_Javascript_Regex_Node.js - Fatal编程技术网

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
    使用
    lastIndex
    属性存储开始下一次匹配的位置。当您将“#工作区_名称”替换为“127”时,
    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
    使用
    lastIndex
    属性存储开始下一次匹配的位置。当您将“#工作区_名称”替换为“127”时,
    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谢谢工作就像一个符咒:)