尝试查找字符串中的每个匹配项并使用自定义函数处理它并将其替换为字符串。当我将text =设置为新字符串时,它永远不会改变,并且最终保持不变。
function submit () {
var searchTerm = document.querySelector('#search-term').value;
var replaceFunction = Function('input', document.querySelector('#function').value);
var text = '<part id="cursor_crosshair" x="96" y="32" w="16" h="16" focusx="7" focusy="7" />';
var output = text;
var regex = new RegExp('\d', 'g');
var match, matches = [];
//search for replacements
while ((match = regex.exec(text)) != null) {
var beforeMatch = output.substring(0, match.index);
var afterMatch = output.substring(match.index + match[0].length, text.length);
text = beforeMatch + replaceFunction(match[0]) + afterMatch;
console.log(text);
}
console.log('result', text);
}
function replaceFunction (input) {
return input * 2;
}
答案 0 :(得分:1)
使用replace()
及其function's callback以match
作为参数,您可以使用更少的代码获得相同的结果。
var text = '<part id="cursor_crosshair" x="96" y="32" w="16" h="16" focusx="7" focusy="7" />';
text = text.replace(/\d+/g, function(match){
return parseInt(match) * 2;
})
console.log(text)
&#13;
答案 1 :(得分:0)
首先,如果使用\\
构造函数,则需要使用RegExp
作为转义序列。或者,您可以使用RegExp文字,如下所示。此外,您只使用\d
来匹配单个数字。相反,您应该使用与完整号码匹配的\d+
。
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
使用构造函数时,正常的字符串转义规则 (当包含在字符串中时带有\的特殊字符前面) 必要。例如,以下内容是等效的:
var re = / \ w + /;
var re = new RegExp(&#39; \\ w +&#39;);
然后你试图用循环来操纵字符串。而只需使用replace
函数,如下所示。
function submit () {
// var searchTerm = document.querySelector('#search-term').value;
// var replaceFunction = Function('input', document.querySelector('#function').value);
var text = '<part id="cursor_crosshair" x="96" y="32" w="16" h="16" focusx="7" focusy="7" />';
var output = text;
var regex = new RegExp('\\d+', 'g'); // <<<<<< RegExp constructor
// OR
regex = /\d+/g; // <<<<<<< RegExp literal
var match, matches = [];
console.log(text);
output = text.replace(regex, replaceFunction);
console.log('result', output);
}
function replaceFunction (input) {
return parseInt(input) * 2;
}
submit();
&#13;
免责声明:使用RegExp处理HTML元素和属性不是一个好主意,如果不仔细使用,您可能会遇到意外问题。使用它需要您自担风险。