【问题标题】:Hexadecimal search by JS test function and replacing it with some value通过 JS 测试函数进行十六进制搜索并将其替换为某个值
【发布时间】:2017-04-20 10:27:56
【问题描述】:

我正在尝试使用十六进制正则表达式模式来识别字符串中的十六进制值并将其替换为某个固定值。但它既没有用测试功能来识别它,也没有取代它。根据我的需要,正则表达式模式似乎没问题。请指教。

 function test_replace() {
    var str = '22:03705081:Xx1aB5c';
    var patrn = /[\x00-\x1f\x22\x5c]/g;
    if (patrn.test(str))
    return str.replace(patrn, 'hexa')
    else
    return str
 }

 test_replace();

【问题讨论】:

  • 请发布输入期望输出的样本
  • 您的正则表达式仅匹配 ASCII 控制字符 "\。您的字符串不包含它们。
  • 将结果分配回str
  • @Wiktor Stribiżew 模式“[\x00-\x1f]”的一部分将不匹配 00 到 1f 范围 31 十六进制值范围以及任何字符串中存在的“22”和 5c 十六进制值跨度>
  • 是的,但是您的输入字符串没有这样的字符。见this demo。你甚至不需要.test() 部分,如果没有找到匹配,.replace() 返回相同的字符串。

标签: javascript regex


【解决方案1】:

您的 [\x00-\x1f\x22\x5c] regex 将 ASCII 字符与从 001F(控制字符)的十六进制代码以及 225C 字符(分别为"\)匹配。

如果您打算匹配 字符串,例如 01234567、@ 987654338@, 9, a, b, c, d, e, f, 10, 11, 12, 13, 14 , 15, 16, 17, 1‌​8, 19, 1a, 1b, 1c, 1d, ​1f, @97654361@, @986 5c使用

/22|5c|1?[0-9a-f]/gi

请参阅regex demo

详情

  • 22 - 22
  • | - 或
  • 5c - 5c
  • | - 或
  • 1?[0-9a-f] - 可选(1 次或 0 次)1 后跟从 af 的任何数字或字母。

function test_replace(str) {
    var patrn = /22|5c|1?[0-9a-f]/gi;
    return str.replace(patrn, 'hex');
 }

console.log(test_replace('22:03705081:Xx1aB5c'));

【讨论】:

    猜你喜欢
    • 2018-07-16
    • 2020-12-07
    • 2016-07-25
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多