Javascript - Replace/convert 1个以上的十六进制转十进制?

Javascript - Replace/convert more than 1 hexadecimal into decimal?

如何将一些(多个)十六进制替换为十进制? 需要用到哪些方法?

示例文本:

Try to convert this hex number 0x5A into (90) and 0x83 into (131).

我想把上面那个0x54和0x83改成90和131,卡住了,不知道要用什么方法。

function convert() {
var code = document.getElementById("codearea").value;
var fhex = code.match(/0[xX][0-9a-fA-F]+/g);
for(var i=0; i<fhex.length;i++) fhex[i] = parseInt(fhex[i], 16);
var fhex1 = fhex;
var c = code.replace(/0[xX][0-9a-fA-F]+/g,fhex1)

document.getElementById("result").value = c;
}
<!-- TextArea Main -->
<textarea id="codearea" rows="5" cols="50">
Try to convert this hex number 0x5A into (90) and 0x83 into (131).
</textarea>
<div id="spacegap"></div>
<!-- TextArea Results -->
<textarea id="result" rows="5" cols="50">
</textarea>
</br>
<button id="btn" onclick="convert()">CLICK</button>

你在输出中得到两个数字两次的原因是因为你将 fhex 传递给 replace,它需要一个字符串,所以它将 [90, 131] 转换为 "90,131".相反,您想传递转换后的数字,然后将其转换为您实际需要的字符串。

另一个问题是,如果您将十六进制正则表达式作为第一个参数传递给 replace,那么它将匹配所有的十六进制数字,因此您想传递仅匹配您想要的字符串的内容替换为您当前拥有的号码。幸运的是,字符串本身可以做到这一点!因此,不是用数字替换每个 fhex[i] 值,如果你保留字符串,并将数字放在一个单独的变量中,你可以将原始字符串和新数字值传递给 replace 像这样:

function convert() {
var code = document.getElementById("codearea").value;
var fhex = code.match(/0[xX][0-9a-fA-F]+/g);
for(var i=0; i<fhex.length;i++) {
    var number = parseInt(fhex[i], 16);
    code = code.replace(fhex[i], number)
}    

document.getElementById("result").value = code;
}
<!-- TextArea Main -->
<textarea id="codearea" rows="5" cols="50">
Try to convert this hex number 0x5A into (90) and 0x83 into (131).
</textarea>
<div id="spacegap"></div>
<!-- TextArea Results -->
<textarea id="result" rows="5" cols="50">
</textarea>
</br>
<button id="btn" onclick="convert()">CLICK</button>

const txt = document.getElementById('codearea').value;

const fhex = txt.match(/0[xX][0-9a-fA-F]+/g);

const replaced = fhex.reduce(
  (acc, hex) => acc.replace(hex, parseInt(hex, 16)),
  txt
);

document.getElementById('codearea').value = replaced;