为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用正则表达式在Javascript中解析某种格式的字符串?

如何使用正则表达式在Javascript中解析某种格式的字符串?

哔哔one 2021-10-29 16:35:39
我有一些像下面这样的字符串ab.ab.c,ab.d,bc.e,mtbc.e,nmtef.1,mt我想要的是用regex某种方式解析这些字符串并得到结果例如ab.ab.c,ab.d,bc.e,mtval1 = ab  (take the value prior to first dot)val2 = ab.c,ab.d,bc.e (take the value after first dot but before the last comma)val3 = mt (take value after the last comma)相似地bc.e,nmtval1 = bc (take the value prior to first dot)val2 = e (take the value after first dot but before the last comma)val3 = nmt (take value after the last comma)ef.1,mtval1 = efval2 = 1val3 = mt现在我的方法更长而且效率低下。这就是我所做的let val3 = someString.split(',').slice(-1)[0]let remaining_string = someString.replace("," + val3, "")let val1 = remaining_string.slice(0, remaining_string.indexOf('.'))    let val2 = nullif(remaining_string.split(",").length > 1) {    val2 = remaining_string.replace("."+val1, "") } else {    val2 = remaining_string.split(".")[1] }没有任何一个衬垫或清洁的解决方案来获得val1,val2并val3迅速?
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

首先,找到第一个点和最后一个逗号的索引。


var idxPeriod = someString.indexOf(".");

var idxComma = someString.lastIndexOf(",");

然后使用substring()方法提取必要的部分。


var val1 = someString.substring(0, idxPeriod);

var val2 = someString.substring(idxPeriod + 1, idxComma);

var val3 = someString.substring(idxComma + 1);


查看完整回答
反对 回复 2021-10-29
?
HUWWW

TA贡献1874条经验 获得超12个赞

您可以使用通用正则表达式来匹配和捕获 1) 字符串开头的任何 1+ 字字符到组 1,2) 第一个非字字符之后的任何字符到组 2 中,直到最后一次出现非- word char 3) 然后是字符串末尾的任何 1+ 字字符。


 /^(\w+)\W(.*)\W(\w+)$/

查看正则表达式演示


注意:如果分隔符是固定字符,请使用/^(\w+)\.(.*),(\w+)$/.


JS演示:


var rx = /^(\w+)\W(.*)\W(\w+)$/;

var ss = ["ab.ab.c,ab.d,bc.e,mt", "bc.e,nmt", "ef.1,mt"];

for (var i=0; i<ss.length; i++) {

  var m = ss[i].match(rx);

  if (m) {

     console.log([m[1], m[2], m[3]]);

  }

}


查看完整回答
反对 回复 2021-10-29
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您可以使用通用正则表达式来匹配和捕获 1) 字符串开头的任何 1+ 字字符到组 1,2) 第一个非字字符之后的任何字符到组 2 中,直到最后一次出现非- word char 3) 然后是字符串末尾的任何 1+ 字字符。


 /^(\w+)\W(.*)\W(\w+)$/

查看正则表达式演示


注意:如果分隔符是固定字符,请使用/^(\w+)\.(.*),(\w+)$/.


JS演示:


var rx = /^(\w+)\W(.*)\W(\w+)$/;

var ss = ["ab.ab.c,ab.d,bc.e,mt", "bc.e,nmt", "ef.1,mt"];

for (var i=0; i<ss.length; i++) {

  var m = ss[i].match(rx);

  if (m) {

     console.log([m[1], m[2], m[3]]);

  }

}


查看完整回答
反对 回复 2021-10-29
  • 3 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信