Javascript - 替换/转换超过 1 个十六进制到十进制?



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

示例文本:

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;

最新更新