fengcaian / NOTES

the notes studied js
0 stars 1 forks source link

正则表达式 #36

Open fengcaian opened 6 years ago

fengcaian commented 6 years ago

匹配数字的时候先将数字转换为字符串

匹配价格(数字或小数,金额不能带负数): 小数点前0到7位,小数点后1或2位:/(^[1-9]\d(\.\d{1,7})?$)|(^0(\.\d{1,2})?$)/ 正数数字:/(^[1-9]\d(\.\d+)?$)|(^0(\.\d)?$)/ 匹配0或者正整数,通常是校验数量:/^([1-9]\d|0)$/ 匹配负数,0,正数:/(^([-])?[1-9]\d(\.\d+)?$)|(^([-])?0(\.\d+)?$)/

匹配 0 < x < 1的数字: var regexp = /^0.[0-9]*[1-9]+$/; console.log(regexp.test('0.1')); // true console.log(regexp.test('0.10')); // false 匹配 0 <= x <= 1的数字:/^0.[0-9]*[1-9]+|0|1$/;

JS基于正则实现数字千分位用逗号分割(适用于整数): num.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')

判断字符串中是否含有重复字符:/(.).*?\1/.test(str)

匹配某个特定字符之后的内容,比如匹配“-”之后到结尾之间的数字:/(?<=-)\d+$/

// js中使用零宽断言(?<=X)需要使用new Regexp实例化一个正则对象
const regexp = new RegExp(/(?<=-)\d+$/);
console.log('asdf-1234'.match(regexp)); // 1234

匹配两个字符串A与B中间的字符串包含A与B:A.*?B

// js中使用零宽断言(?<=X)需要使用new Regexp实例化一个正则对象
const regexp = new RegExp(/A.*?B/);
console.log('dddAwww.baidu.comBfff'.match(regexp)); // Awww.baidu.comB

匹配两个字符串A与B中间的字符串包含A但是不包含B:A.*?(?=B)

// js中使用零宽断言(?<=X)需要使用new Regexp实例化一个正则对象
const regexp = new RegExp(/A.*?B/);
console.log('Awww.apizl.comB'.match(regexp)); // Awww.apizl.com

匹配两个字符串A与B中间的字符串且不包含A与B:(?<=A).*?(?=B)

// js中使用零宽断言(?<=X)需要使用new Regexp实例化一个正则对象
const regexp = new RegExp(/(?<=A).*?(?=B)/);
console.log('Awww.baidu.comB'.match(regexp)); // www.baidu.com

去掉前后空格:/(^\s)|(\s$)/g

不匹配某些特定字符串:/^((?!aaa|.html|.css).)*$/

const regexp = new RegExp(/^((?!aaa|\.html|\.css).)*$/); // 不包含aaa、.html、.css
console.log(regexp.test('asdf.html')); // false
console.log(regexp.test('asdf.hhtml')); // true

匹配中文与数字中间的【逗号,空格】,可用于校验输入用户格式:

var reg = new RegExp(/(?<=[\u4e00-\u9fa5]+)\s*,*\s*(?=\d)/g)
'小明, 123'.match(reg); // ', '

注:Firefox、IE(含edge)、Safari不支持正则中的后置断言

(?<= )     (?<! )

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

fengcaian commented 6 years ago

不匹配某些字符串:

var partten = /^((?!insert|delete).)*$/;
var str = 'inse1rt112de2lete';
console.log(partten.test(str));
fengcaian commented 6 years ago

var str = 'this is 000¥ and 0000000$';
var reg = /([0]+(?=[¥|\$]))/g;  
var reg2 = /0+[¥|\$]/g;    
console.log(str.replace(reg, 'A'));
```reg和reg2的区别是前者只替换0,后者会将0和¥及$都替换
fengcaian commented 5 years ago

只能输入汉字:^[\u4e00-\u9fa5]*$ 不能输入汉字:^[^\u4e00-\u9fa5]*$ 匹配0001-9999:/^0{3}[1-9]|0{2}[1-9]\d|0[1-9]\d{2}|[1-9]\d{3}$/

dfgong commented 4 years ago

可以的