Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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 分析文本中的特殊字符串(例如“%var%”)?_Javascript - Fatal编程技术网

Javascript 分析文本中的特殊字符串(例如“%var%”)?

Javascript 分析文本中的特殊字符串(例如“%var%”)?,javascript,Javascript,我提供了一个Javascript函数字符串和命令SVG路径命令: move和line是命令 数字是x,y坐标 我想向这些命令添加特殊字符串,这将指示函数使用特定变量 eg. "move %mouseX%+1 %mouseY%+1" 其中%mouseX%和%mouseY%将是鼠标的x,y坐标 如何解析和替换这些 您可以使用拆分方法拆分字符串 var arrSplitString = stringToSplit.split(' '); 结果将是一个数组。然后用所需的索引值替换相应的索引值 看 要

我提供了一个Javascript函数字符串和命令SVG路径命令:

move和line是命令

数字是x,y坐标

我想向这些命令添加特殊字符串,这将指示函数使用特定变量

eg. "move %mouseX%+1 %mouseY%+1"
其中%mouseX%和%mouseY%将是鼠标的x,y坐标


如何解析和替换这些

您可以使用拆分方法拆分字符串

var arrSplitString = stringToSplit.split(' ');
结果将是一个数组。然后用所需的索引值替换相应的索引值

要获得鼠标位置,可以使用e.PageX和e.PageY


其中mouseX和mouseY是保持鼠标位置的变量。

对于这种类型的字符串操作,作为起点,您可以利用string.prototype.replace函数的强大功能,使用其回调函数:

function replaceTokens(str, replacement) {
  return str.replace(/\%([^%]+)\%/g, function (string, match) {
    return replacement[match];
  });
}

replaceTokens("move %mouseX%+1 %mouseY%+1", {mouseX: 100, mouseY: 200});
// returns  "move 100+1 200+1"
replaceTokens("%foo% %bar%!!!", {foo: 'Hello', bar: 'World'});
// returns Hello World!!!
replaceTokens("I'm %name%, and I %action% %place%", {name: 'CMS',
  action: 'love',
  place:'StackOverflow'
}); // "I'm CMS, and I love StackOverflow"
这只是一个简单的例子,说明你可以用这种技术做什么。这个小函数将使您能够在一个步骤中进行多个%token%替换

推荐条款:


很高兴这有帮助。如果您不想硬编码特殊变量名,并且认为可以添加更多,CMS的答案非常适合。顺便说一句,有一个问题,它只会替换第一个出现的变量名!我发现把它写成/%mouseX%/g可以让它正常工作
var command = 'move %mouseX%+1 %mouseY%+1';
command = command.replace('%mouseX%', mouseX).replace('%mouseY%', mouseY);
function replaceTokens(str, replacement) {
  return str.replace(/\%([^%]+)\%/g, function (string, match) {
    return replacement[match];
  });
}

replaceTokens("move %mouseX%+1 %mouseY%+1", {mouseX: 100, mouseY: 200});
// returns  "move 100+1 200+1"
replaceTokens("%foo% %bar%!!!", {foo: 'Hello', bar: 'World'});
// returns Hello World!!!
replaceTokens("I'm %name%, and I %action% %place%", {name: 'CMS',
  action: 'love',
  place:'StackOverflow'
}); // "I'm CMS, and I love StackOverflow"