<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>点击下面的按钮来提取信息:</p>
<button onclick="myFunction()">点击这里</button>
<p id="demo"></p>
<p id="demo2"></p>
<script>
var index_int;
var simple_msg;
var last_index_int;
var code;
var express;
var msg = "【京东快递】J2306请到小区快递驿站领取";
var msg_reverse;
function myFunction() {
//识别取货码:
index_int = msg.search(/[\d|\[a-zA-Z\]]/);//正则匹配满足英文或数字字符的第一个下标
simple_msg = msg.substring(index_int, index_int + 10);
//一般取货码不超过10个字符,故缩短长度
msg_reverse = simple_msg.split('').reverse().join("");
//反转字符串
last_index_int = simple_msg.lastIndexOf(msg_reverse.charAt(msg_reverse.search(/\d/)));
//找到反转字符串msg_reverse 第一个数字的下标,其返回的字符最后一次出现在simple_msg的位置的下标
code= simple_msg.substring(0, last_index_int + 1);//取货码
//识别快递名称:
a = this.msg.indexOf("快递");
express = this.msg.substring(this.a - 2, this.a);//快递名称
document.getElementById("demo").innerHTML = code;
document.getElementById("demo2").innerHTML=express ;
}
</script>
演示:
文章的search函数中\d代表匹配数字,
\[a-zA-Z\]表示匹配英文,因为有的取货号是英文字母开头的
文章只解决了取货号(取货号前没有数字的情况)在短信前部分的情况,不包括取货号在中间或者在尾部的情况(取货号前可能有数字的情况)