replace(/,/g, ‘‘);/\B(?=(\d{3})+(?!\d))/;千分位分隔

js 复制代码
let str = "1,234,567";
let newStr = str.replace(/,/g, ''); // 将所有逗号替换为空字符串
console.log(newStr); // 输出 "1234567"
  • replace():这是一个字符串方法,用于替换字符串中的某些部分。

  • /,/g:这是一个正则表达式,用于匹配字符串中的所有逗号(,)。

    • /:表示正则表达式的开始和结束。
    • ,:表示要匹配的字符,这里是逗号。
    • g:是一个修饰符,表示全局匹配(global),即替换字符串中所有的逗号,而不仅仅是第一个。
  • '':这是替换的内容,这里是一个空字符串,表示将匹配到的逗号替换为"无"。

总结

replace(/,/g, '') 的作用是从字符串中移除所有的逗号,返回一个不包含逗号的新字符串。


在正则表达式中,^$ 以及 /.../ 的使用场景有所不同。

  1. ^$
  • ^:用于匹配字符串的开头。
  • $:用于匹配字符串的结尾。

使用场景

  • 当需要确保整个字符串从头到尾都符合某个模式时,使用 ^$
js 复制代码
let str1 = "Hello";
let str2 = "Hello, World!";
let regex = /^Hello$/; // 只匹配完全等于 "Hello" 的字符串

console.log(regex.test(str1)); // 输出 true
console.log(regex.test(str2)); // 输出 false
  1. /.../
    /.../ 是正则表达式的语法,用于定义一个正则表达式模式。

使用场景

  • 当你需要创建一个正则表达式以匹配字符串中的某些模式时,使用 /.../
js 复制代码
let str = "Hello, World!";
let regex = /Hello/; // 匹配包含 "Hello" 的字符串

console.log(regex.test(str)); // 输出 true

总结

  • 使用 ^$ 来限制匹配的范围,确保字符串从头到尾符合某个模式。
  • 使用 /.../ 来定义正则表达式模式,以便在字符串中查找或替换特定内容。
eg:
js 复制代码
$(".form-edit .num").click(function () {
    var oDiv = document.getElementById("input-box");
    
    // 获取当前内容,去掉已有的逗号
    var currentValue = oDiv.innerHTML.replace(/,/g, '');
    
    // 追加当前点击的数字
    currentValue += this.innerHTML;

    // 使用正则表达式从右边每三位添加逗号
    var formattedValue = currentValue.replace(/\B(?=(\d{3})+(?!\d))/g, ',');

    // 更新 oDiv 的内容
    oDiv.innerHTML = formattedValue;
});
解释

正则表达式 (?=(\d{3})+(?!\d)) 是一个复杂的模式,主要用于在数字中每三位插入逗号。

组成部分
  • (?=...):这是一个前瞻断言(lookahead assertion),用于检查后面是否有某个模式,但不消耗字符。也就是说,它只检查后面的内容,而不将其包含在匹配结果中。

  • (\d{3})+

    • \d:表示一个数字字符(0-9)。
    • {3}:表示前面的模式(数字)出现 3 次。
    • +:表示前面的模式((\d{3}))可以出现一次或多次。这意味着可以有多个三位数字的组合。
  • (?!\d):这是一个负向前瞻断言(negative lookahead assertion),用于确保后面没有数字字符。也就是说,匹配的地方后面不能跟着一个数字。

整体理解
  • 整个表达式的意思是:在字符串中查找每个位置,确保这个位置后面有一个或多个三位数字的组合,并且这个位置后面不能再跟着其他数字。
  • 这样可以确保在每三个数字之间插入逗号,而不会在字符串的末尾添加逗号。
任务参考实现

当用户输入的数字位数超过三位时,需要使用千分位分隔符(即英文逗号 ",")对金额进行分隔。

js 复制代码
<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"
    />
    <meta http-equiv="Cache-Control" content="no-store" />
    <title>How Many Digits Can You See?</title>
    <link rel="stylesheet" href="./style.css" />
  </head>

  <body>
    <div class="wrap">
      <form action="" class="edit-cash">
        <p>Total consumption amount</p>
        <div class="shuru">
          <span>&#36;</span>
          <div id="input-box"></div>
        </div>
        <p>Inquire with staff for the total amount payable.</p>
      </form>
      <input type="submit" value="Pay" class="submit" />
    </div>
    <div class="layer"></div>
    <div class="form">
      <form action="" method="post">
        <input type="text" placeholder="name" />
        <input type="text" placeholder="telephone" />
        <input type="submit" value="submit" class="infor-sub" />
      </form>
    </div>
    <div class="layer-content">
      <div class="form-edit clearfix">
        <div class="num num1">1</div>
        <div class="num num2">2</div>
        <div class="num num3">3</div>
        <div class="num num4">4</div>
        <div class="num num5">5</div>
        <div class="num num6">6</div>
        <div class="num num7">7</div>
        <div class="num num8">8</div>
        <div class="num num9">9</div>
        <div class="num num0">0</div>
        <div id="remove">Delete</div>
      </div>
    </div>
    <script src="./jquery.min.js"></script>
    <script>
      $(function () {
        $(".infor-sub").click(function (e) {
          $(".layer").hide();
          $(".form").hide();
          e.preventDefault();
        });
        $(".shuru").click(function (e) {
          $(".layer-content").animate(
            {
              bottom: 0
            },
            200
          );
          e.stopPropagation();
        });
        $(".wrap").click(function () {
          $(".layer-content").animate(
            {
              bottom: "-200px"
            },
            200
          );
        });
        $(".form-edit .num").click(function () {
          var oDiv = document.getElementById("input-box");
          oDiv.innerHTML = count("add", this.innerHTML);
        });
        $("#remove").click(function () {
          var oDiv = document.getElementById("input-box");
          oDiv.innerHTML = count("sub");
        });
        let dataArray = [];
        function changeArray(array) {
          array = JSON.parse(JSON.stringify(array));
          if (array.length > 3) {
            return array.join("").replace(/(?=\B(\d{3})+$)/g, ",");
          } else {
            return array.join("");
          }
        }
        function count(option, str = null) {
          if (option == "add") {
            dataArray.push(str);
          } else {
            dataArray.pop();
          }
          return changeArray(dataArray);
        }
      });
    </script>
  </body>
</html>
相关推荐
XL's妃妃19 分钟前
Arthas:Java 应用诊断利器
java·开发语言
Michelle802321 分钟前
24大数据 14-1 函数
开发语言·python
youyu-youyu27 分钟前
h5 签名 vue
javascript·vue.js·ecmascript
free-elcmacom29 分钟前
Python信号分析项目:高速数字系统的眼图破案记
开发语言·python
小毅&Nora31 分钟前
【后端】【JAVA】协程:从虚拟线程到协程编程的全面解析
java·开发语言
Apifox32 分钟前
如何通过抓包工具快速生成 Apifox 接口文档?
前端·后端·测试
A charmer33 分钟前
内存泄漏、死锁:定位排查工具+解决方案(C/C++ 实战指南)
c语言·开发语言·c++
没事多睡觉66634 分钟前
JavaScript 中 this 指向教程
开发语言·前端·javascript
苏打水com34 分钟前
浏览器与HTTP核心考点全解析(字节高频)
前端·http
用户990450177800934 分钟前
ruoyi集成camunda-前端篇
前端