js中字符串的方法,仔细使用才发现十分强悍:
(备注:此处只谈跟正则有关的使用)
1. match
在match后:
若不匹配: 返回null
若匹配:返回数组(如果正则包含“g”,数组元素分别为匹配的字符串; 如果不包含,则返回首次匹配的子字符串,以及属性input和index)
2. replace (超级强大)
使用replace,有两个参数,第一个使用正则,第二可使用单独的字符串或者函数(如下详谈函数有关的使用)
使用函数:
第一个参数表示匹配的子字符串,第二个,第三个。。。表示跟分组有关的子字符串(没有分组,则忽略这些参数),后面还带有匹配的子字符串的下标、最后是原始字符串。
看示例:
//分别测试多个示例
function test2() {
var s1 = "javascript";
s1 = "abc123adfjk-Ljdfjk_dfa";
s1 = " this is a very good day, and it's very wanderful.";
// s1 = "张三73分,李四99分,王五59.5分,赵六19.5分。";
console.log(s1);
var s2 = s1.replace(/(java)(script)/, "$2-$1");
var s2 = s1.replace(/\W/g, "*");
var s2 = s1.replace(/(\b\w+\b)/g, f1);
// var s2 = s1.replace(/\b(\w)(\w+)\b/g, f2);
// var s2 = s1.replace(/\d+(\.\d)?/g, f3);
function f1($1) {
console.log(arguments);
return $1.charAt(0).toUpperCase() + $1.substring(1, $1.length);
}
function f2($1, $2, $3) {
// console.log($1, $2, arguments);
return $2.toUpperCase() + $3;
// console.log(arguments, f2.length);
}
function f3($1) {
}
// var s2 = s1.replace(/^[a-zA-Z]/g, "*");
console.log(s2);
}
test2();
//match和replace的综合使用
function test2_1() {
var s = "张三73分,李四99分,王五59.5分,赵六19.5分。";
var re = /\d+\.?\d*/g;
var arr = s.match(re);
var avg = 0;
for(var i = 0, n = arr.length; i < n; i++) {
avg += parseFloat(arr[i]);
}
avg /= i;
var result = s.replace(re, func);
function func($1) {
return $1 + "(平均分:" + avg + ",相差:" + (avg - parseFloat($1)) + ")";
}
console.log(arr, avg, result);
}
//test2_1();
//单独测试match方法
function test3() {
var s = "ab12cdd12_dd2fad_dfae1234 dd";
var re = /\d+/;
var arr = s.match(re);
// console.log(arr);
for(var p in arr) {
console.log("p", p, arr[p]);
}
}
//test3();