You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript正则表达式提取字符串中各语言对应数值?

解决方案

原代码的问题

  • 变量名不一致:定义的变量是myString,但调用match时错误使用了sonar_myString,导致ReferenceError。
  • 重复定义regexp_jsp和ncloc_jsp,属于冗余代码。
  • 全局标志g多余:每个语言键只出现一次,不需要全局匹配,match返回的数组中第一个元素就是目标值。

修正后的单正则匹配方案

直接修正变量名和冗余代码,保留你原本的正则思路:

var myString = "java=10514;js=237;jsp=3995;web=5;xml=42";

// 提取java对应数值
var regexp_java = /(?<=java=).*?(?=;|$)/;
var ncloc_java = myString.match(regexp_java)[0];

// 提取js对应数值
var regexp_js = /(?<=js=).*?(?=;|$)/;
var ncloc_js = myString.match(regexp_js)[0];

// 提取jsp对应数值
var regexp_jsp = /(?<=jsp=).*?(?=;|$)/;
var ncloc_jsp = myString.match(regexp_jsp)[0];

// 提取web对应数值
var regexp_web = /(?<=web=).*?(?=;|$)/;
var ncloc_web = myString.match(regexp_web)[0];

// 提取xml对应数值
var regexp_xml = /(?<=xml=).*?(?=;|$)/;
var ncloc_xml = myString.match(regexp_xml)[0];

// 测试输出
console.log(ncloc_java); // "10514"
console.log(ncloc_js); // "237"
console.log(ncloc_jsp); // "3995"
console.log(ncloc_web); // "5"
console.log(ncloc_xml); // "42"

更高效的批量处理方案

如果语言类型较多,推荐一次性提取所有键值对,再转换为变量,代码更简洁:

var myString = "java=10514;js=237;jsp=3995;web=5;xml=42";
var ncloc = {};

// 用正则批量匹配所有键值对
var regex = /(\w+)=(\d+)/g;
let match;
while ((match = regex.exec(myString)) !== null) {
  ncloc[match[1]] = match[2];
}

// 提取到单独变量
var ncloc_java = ncloc.java;
var ncloc_js = ncloc.js;
var ncloc_jsp = ncloc.jsp;
var ncloc_web = ncloc.web;
var ncloc_xml = ncloc.xml;

// 测试输出
console.log(ncloc_java); // "10514"
console.log(ncloc_js); // "237"

或者用字符串分割实现(无需正则):

var myString = "java=10514;js=237;jsp=3995;web=5;xml=42";
var ncloc = {};

// 分割为键值对数组后逐一处理
myString.split(';').forEach(pair => {
  const [key, value] = pair.split('=');
  ncloc[key] = value;
});

// 提取变量
var ncloc_java = ncloc.java;
var ncloc_js = ncloc.js;
// ...其他变量同理

内容的提问来源于stack exchange,提问作者Cesare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:15:41