JavaScript RegExp 对象 -- 正则(ip转换数字、域名提取)、毫秒转为日期-天时分秒

一、JS中的正则对象

原文:https://www.runoob.com/jsref/jsref-obj-regexp.html

var patt = new RegExp(pattern,modifiers);
或
var patt = /pattern/modifiers; 

modifiers 修饰符,即匹配模式如下:

修饰符描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。
// 如果需要常规的字符转义规则(在前面加反斜杠 \)。
// 注意,如果是new的形式,需要两个斜杆 \\ 而简便的/ /模式只需要一个斜杆 \,以下是等价的:
var re1 = new RegExp("www\\.baidu\\.com");
var re2 = /www\.baidu\.com/;

 

二、RegExp 对象方法

方法描述
exec 检索字符串中指定的值。返回找到的值,并确定其位置。
test 检索字符串中指定的值。返回 true 或 false。
toString 返回正则表达式的字符串。

1、exec

原文:https://www.runoob.com/jsref/jsref-exec-regexp.html

exec() 方法用于检索字符串中的正则表达式的匹配。

如果字符串中有匹配的值返回该匹配值(数组),否则返回 null。

语法

RegExpObject.exec(string)
var str = "Hello world!";
// 查找"Hello",exec返回的是数组
var patt = /Hello/g;
var result = patt.exec(str);
console.log("结果: " +  result[0]);

// 查找 "dog"
var str2 = "Hello Dog"
var patt2 = new RegExp("dog", "i");
var result2 = patt2.exec(str2);
console.log("结果: " +  result2[0]);

/* 
结果: Hello
结果: Dog
*/

 

2、test

原文:https://www.runoob.com/jsref/jsref-test-regexp.html

test() 方法用于检测一个字符串是否匹配某个模式.

如果字符串中有匹配的值返回 true ,否则返回 false。

语法

RegExpObject.test(string)
var str = "Hello world!";
// 查找"Hello",test返回值是布尔值
var patt = /Hello/g;
var result = patt.test(str);
console.log("结果: " +  result);

//查找 "dog"
var str2 = "Hello Dog"
var patt2 = new RegExp("dog", "i");
var result2 = patt2.test(str2);
console.log("结果: " +  result2);

/*
结果: true
结果: true
*/

 

3、toString

原文:https://www.runoob.com/jsref/jsref-regexp-tostring.html

用于返回正则表达式的字符串值

var patt = new RegExp("zzz", "g");
var res = patt.toString();

// "/zzz/g"

 

三、RegExp 对象属性

属性描述
constructor 返回一个函数,该函数是一个创建 RegExp 对象的原型。
global 判断是否设置了 "g" 修饰符
ignoreCase 判断是否设置了 "i" 修饰符
lastIndex 用于规定下次匹配的起始位置
multiline 判断是否设置了 "m" 修饰符
source 返回正则表达式的匹配模式

 

var patt = new RegExp("zzz", "g");
patt.lastIndex  // 0
patt.global  // true
patt.ignoreCase  // false
patt.multiline  // false
patt.source  // "zzz"

 

四、支持正则表达式的 String 对象的方法

方法描述
search 检索与正则表达式相匹配的值。
replace 替换与正则表达式匹配的子串。
split 把字符串分割为字符串数组。
match 找到一个或多个正则表达式的匹配。

 

1、search

原文:https://www.runoob.com/jsref/jsref-search.html

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

如果没有找到任何匹配的子串,则返回 -1。

语法

string.search(searchvalue)

参数值

参数描述
searchvalue 必须。查找的字符串或者正则表达式。

返回值

类型描述
Number 与指定查找的字符串或者正则表达式相匹配的 String 对象起始位置。
var str = "my name is Zzbj";
str.search("z"); // 找到小写的z,返回12

str.search(/z/i);  // 使用正则,忽略大小写,找到大写的Z,返回11

var r = new RegExp("z+");
str.search(r);  // 找到小写的z,返回12

 

2、replace

原文:https://www.runoob.com/jsref/jsref-replace.html

定义和用法

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串.

该方法不会改变原始字符串。

语法

string.replace(searchvalue,newvalue)

参数值

参数描述
searchvalue 必须。字符串或者正则regexp对象。
newvalue 必需。一个字符串值。规定了替换文本或生成替换文本的函数。

返回值

类型描述
String 一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
var str = "you are a big big pig";
var str_res = str.replace("big", "small");  // "you are a small big pig"

var reg_res = str.replace(/big/g, "small");  / "you are a small small pig"

 

3、split

原文:https://www.runoob.com/jsref/jsref-split.html

定义和用法

split() 方法用于把一个字符串分割成字符串数组。

提示: 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

注意: split() 方法不改变原始字符串。

 

语法

string.split(separator,limit)

参数值

参数描述
separator 可选。字符串或正则表达式,从该参数指定的地方分割 string Object。
limit 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

返回值

类型描述
Array 一个字符串数组。该数组是通过在 separator 指定的边界处将字符串 string Object 分割成子串创建的。返回的数组中的字串不包括 separator 自身。
var str = "hello my big pig";
var res_all = str.split(" ");  // ["hello", "my", "big", "pig"]
var res_2 = str.split(" ", 2);  // ["hello", "my"]

var str2 = "helloabcmyabcpig";
var res_reg = str2.split(/abc/);  // ["hello", "my", "pig"]

 

4、match

原文:https://www.runoob.com/jsref/jsref-match.html

match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

 match() 方法将检索字符串 String Object,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。

语法

string.match(regexp)

参数值

参数描述
regexp 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。

 

返回值

类型描述
Array 存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。 如果没找到匹配结果返回 null 。
var str = "I am handsome boy very handsome";
var res = str.match(/handsome/gi);  // ["handsome", "handsome"]

 

五、如何判断某ip地址是否在指定的ip地址段范围内

我们可以先把IP转换成数字,然后再进行比较

/*
把ip转为数值
*/
function ip2num(ip) {
    let ip_array = ip.split(".");
    let number = parseInt(ip_array[0]) * 256 * 256 * 256 + 
                    parseInt(ip_array[1]) * 256 * 256 +
                    parseInt(ip_array[2]) * 256 + 
                    parseInt(ip_array[3]);
    return number;
}

/*
把数值转换为ip,方法一
*/
function num2ip(number) {
    // Math.floor(x): 返回小于等于x的最大整数
    let ip = Math.floor(number / (256 * 256 * 256)) + "." +
                    Math.floor(number % (256 * 256 * 256) / (256 * 256)) + "." +
                    Math.floor(number % (256 * 256) / 256) + "." +
                    Math.floor(number % 256);
    return ip;
}

/*
把数值转换为ip,方法二
*/
function num2ip2(number) {
    // Math.floor(x): 返回小于等于x的最大整数
    var a = Math.floor(number / (256 * 256 * 256));
    var b = Math.floor(number / (256 * 256) - a * 256);
    var c = Math.floor(number / (256) - a * 256 * 256 - b * 256);
    var d = Math.floor(number - a * 256 * 256 * 256 - b * 256 *256 - c *256);
    let ip = `${a}.${b}.${c}.${d}`;
    return ip;
}


var ip = "127.0.0.2";
var target_ip = "127.0.0.1-127.0.0.10";
var target_1 = target_ip.split("-")[0];
var target_2 = target_ip.split("-")[1];
if (ip2num(ip) >= ip2num(target_1) && ip2num(ip) <= ip2num(target_2)) {
    // 满足条件
    console.log("success");
} else {
    console.log("failed");
}

 

六、从字符串中截取相应的域名

var reg = /[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/;  
var host = reg.exec("http://www.test.com:9000/article/p/2");  
console.log(host[0]);

 

七、毫秒转为日期:天时分秒

// 毫秒转为日期:天时分秒
function getDuration(millisecond) {
    var time = "";
    
    var days = millisecond / 1000 / 60 / 60 / 24;
    var daysRound = Math.floor(days);
    
    var hours = millisecond / 1000 / 60 / 60 - 24 * daysRound;
    var hoursRound = Math.floor(hours);

    var minutes = millisecond / 1000 / 60 - 24 * 60 * daysRound - 60 * hoursRound;
    var minutesRound = Math.floor(minutes);

    var seconds = millisecond / 1000 - 24 * 60 * 60 * daysRound - 60 * 60 * hoursRound - 60 * minutesRound;

    if (daysRound) { 
        time = daysRound + "天"+ hoursRound + "小时"+minutesRound + "分钟"; 
    } else if (!daysRound && hoursRound) { 
        time = hoursRound + "小时"+minutesRound + "分钟"; 
    } else if (!daysRound && !hoursRound && minutesRound) {
        time = minutesRound + "分钟"; 
    } else if (!daysRound && !hoursRound && !minutesRound && seconds) {
        time = seconds + "秒"; 
    }
    return time; 
}

 

posted @ 2022-02-19 22:14  我用python写Bug  阅读(339)  评论(0编辑  收藏  举报