JavaScript之正则表达式

两种形式

  • 字面量
  • RegExp对象

匹配形式

  • 严格匹配
  • 匹配字符组
//[]:组,匹配组中出现的任意字符
var pattern = /[sysuygm]/;
console.log(pattern.test('sysu'));
console.log(pattern.test('ygm'))

// 脱字符^: 指定不想匹配到的字符
var pattern = /[^sysuygm]/;
console.log(pattern.test('sysu')); //false
console.log(pattern.test('d')); //true

// 匹配字符或数字的某个连续范围
var pattern = /[0-6]/;
console.log(pattern.test(12345));//true
console.log(pattern.test(678));//true
console.log(pattern.test(78));//false
//反义字符
var pattern = /[\^sysuygm]/;
console.log(pattern.test('sysu')); //true
console.log(pattern.test('^')); //true

//exec()方法:返回所有匹配的一个数组
var strToMatch = "welcome to javascript's world";
var resExAt = /javascript/;
var arrMatched = resExAt.exec(strToMatch);
console.log(arrMatched);
// [ 'javascript',
//   index: 11,
//   input: 'welcome to javascript\'s world' ]
//g:全局匹配
var strToMatch = "welcome to javascript's and java's world";
var resExAt = /java/g;
var arrMatched = resExAt.exec(strToMatch);
console.log(arrMatched);
// [ 'java',
//   index: 11,
//   input: 'welcome to javascript\'s and java\'s world' ]
//使用String对象的match()方法
var strToMatch = "welcome to javascript's and java's world";
var resExAt = /java/g;
var arrMatched = strToMatch.match(resExAt);
console.log(arrMatched);//[ 'java', 'java' ]

//使用String对象的replace()
var strToMatch = "welcome to javascript's and java's world";
var resExAt = /java/g;
var arrMatched = strToMatch.replace(resExAt, 'golang');
console.log(arrMatched);//welcome to golangscript's and golang's world
//第二个参数也可以传callback
var arrMatched1 = strToMatch.replace(resExAt,function (matchText) {
    return  'golang';
  });
console.log(arrMatched1);//welcome to golangscript's and golang's world

// 使用String对象的split()
var strToMatch = "程序=算法+数据结构";
var resExAt = /\+/g; //需要转义!
var arrMatched = strToMatch.split(resExAt);
console.log(arrMatched);//[ '程序=算法', '数据结构' ]
//简单字符组匹配多个模式
// i: 忽视大小写
var strToMatch = "dear bat,a fat Cat, a fat cat";
var resExAt = /[abc]at/gi; 
var arrMatched = strToMatch.match(resExAt);
console.log(arrMatched);//[ 'bat', 'Cat', 'cat' ]
console.log(resExAt.exec(strToMatch))
//[ 'bat', index: 5, input: 'dear bat,a fat Cat, a fat cat' ]

var strToMatch = "r1,R2,r3,R4,r5,r6,r7";
var resExAt = /r[0-5]/gi;
var arrMatches = strToMatch.match(resExAt);
console.log(arrMatches);//[ 'r1', 'R2', 'r3', 'R4', 'r5' ]

//^:否定字符用来过滤
var resExAt = /r[^0-5]/gi;
var arrMatches = strToMatch.match(resExAt);
console.log(arrMatches);//[ 'r6', 'r7' ]
// \d:任意的单个数字字符
// \w:任意单个字母或者数字字符
// \s:任意的单个空白字符(空格,制表符,换行符等)
// \D:任意的单个非数字字符
// \W:任意的单个非字母或数字字符
// \S:任意的单个非空白字符
// .:除换行符之外的任意单个字符
var str = '135-6878-0989';
var re = /[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]/;
var arr = str.match(re);
console.log(arr);
//[ '135-6878-0989', index: 0, input: '135-6878-0989' ]
var re = /\d\d\d-\d\d\d\d-\d\d\d\d/;
var arr = str.match(re);
console.log(arr);
//[ '135-6878-0989', index: 0, input: '135-6878-0989' ]
  • 重复出现
// ?:出现0次或者1次
// *:出现0次或多次
// +:出现1次或多次
// {n}:只出现n次
// {n,m}:出现n到m次
// {n,}:至少出现n次
// {,n}:出现0到n次

示例:

var re = /sysuyg?m/;
console.log(re.test('sysuym')); //true
console.log(re.test('sysuyggm')); //false
console.log(re.test('sysuygm')); //true
console.log(re.test('sysu')); //false

console.log(/\d+/.test('1234')); //true
console.log(/\d+/.test(''));//false

//使用()进行分组
var re = /ha+(ha+)+/i;
str1 = 'haha';//ha(ha)(ha)
str2 = 'haahaahaa'; //ha(haa)(haa)
str3 = 'hahha';//ha(h)(ha)
console.log(re.test(str1));//true
console.log(re.test(str2));//true
console.log(re.test(str3));//false

//使用 \b 指定单词边界

var str = 'a cat';
var re = /\bcat/
console.log(re.test(str));//true
console.log(re.test('tomcat'));//false

var re = /cat\b/;
console.log(re.test('tomcat'));//true

var re = /\bcat\b/;
console.log(re.test('tomcat'));//false
console.log(re.test('tom cat'));//true 
//选择结构
var re = /(ab)+|(cd)+/;
console.log(re.test('abcd'));//true
console.log(re.test('ababcd'));//true
console.log(re.test('abacd'));//true
console.log(re.test('ac')); //false
  • 首部尾部
//匹配特定字符开始的字符串
var re = /^test/;
console.log(re.test('est'));//false
console.log(re.test('test'));//true
console.log(re.test('testdd'));//true

//匹配特定字符结尾的字符串
var re = /test$/;
console.log(re.test('tes'));//false
console.log(re.test('ddtest'));//true
console.log(re.test('testt')); //false
  • 向后引用
//匹配特定字符开始的字符串
var re = /^test/;
console.log(re.test('est'));//false
console.log(re.test('test'));//true
console.log(re.test('testdd'));//true

//匹配特定字符结尾的字符串
var re = /test$/;
console.log(re.test('tes'));//false
console.log(re.test('ddtest'));//true
console.log(re.test('testt')); //false

var re = /([xyz])a\1/;
console.log(re.test('xax')); //true, 因为\1匹配的是 x
console.log(re.test('xay')); //false, 因为\1匹配的是 x
console.log(re.test('xyax')); //false, 因为\1匹配的是 x,a对应了y
  • 惰性限定符和贪婪限定符
    • 惰性限定符尽可能少地匹配字符(?)
var re = /\w+?e/;
console.log(re.test('a fat cat')); //false
console.log(re.test('a warm coffee'));//true
console.log(re.exec("a warm coffee"));
//[ 'coffe', index: 7, input: 'a warm coffee' ]
var re = /\w+e/g;
console.log(re.exec("a warm coffee"));
//[ 'coffee', index: 7, input: 'a warm coffee' ]
//删除字符串收尾的空格
function trim(str) {
    return (str||'').replace(/^\s+|\s+$/g,'');
  }
  console.log("---" + trim("    cat     ") + "---");
  //---cat---

var re = /\s+/g;
console.log('a    cat      is    fat'.replace(re,' '));//a cat is fat
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript正则表达式和Java正则表达式在语法上有一些差异,但是它们的基本概念和用法是相似的。下面是将JavaScript正则表达式转换为Java正则表达式的一些常见规则: 1. 语法差异: - JavaScript正则表达式使用斜杠(/)作为定界符,而Java正则表达式使用双引号(")作为定界符。 - JavaScript正则表达式中的特殊字符需要进行转义,而Java正则表达式中的特殊字符不需要转义。 2. 字符类: - JavaScript正则表达式中的字符类使用方括号([])表示,而Java正则表达式中使用方括号([])或者Unicode转义(\p{...})表示。 - JavaScript正则表达式中的字符类可以使用连字符(-)表示范围,而Java正则表达式中需要使用Unicode转义(\uXXXX)表示范围。 3. 量词: - JavaScript正则表达式中的量词使用花括号({})表示,而Java正则表达式中使用花括号({})或者问号(?)表示。 - JavaScript正则表达式中的贪婪量词默认是贪婪模式,而Java正则表达式中的贪婪量词需要在后面添加问号(?)来表示非贪婪模式。 4. 边界匹配: - JavaScript正则表达式中的边界匹配使用插入符号(^)和美元符号($)表示,而Java正则表达式中使用\A和\Z表示。 5. 其他差异: - JavaScript正则表达式中的捕获组使用圆括号(())表示,而Java正则表达式中使用圆括号(())或者方括号([])表示。 - JavaScript正则表达式中的反向引用使用反斜杠加数字(\1、\2等)表示,而Java正则表达式中使用美元符号加数字($1、$2等)表示。 以上是一些常见的JavaScript正则表达式转换为Java正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值