正则表达式

其实开发过程中,一般我们不会去专门的记正则,但是我们需要知道一些简单的正则处理方式,接下来,我会从开始简单的讲下,正则,再结合业务举例我们业务中的使用场景

正则大法

我发现正则有个很有意思的,大小写代表的规则互斥,详情 请看下文

匹配任意字符
当一个点时匹配所有字符,
当两个点以上还代表一个位置

/./g

匹配字母和数字

/\w/g

匹配非字母和数字

/\W/g

只匹配数字

/\d/g

匹配所有不是数字的

/\D/g

匹配空格

/\s/g

匹配字符集合,(中括号内的代表针对字符的匹配规则)

/[a-z]/g

汉字

/[\u4e00-\u9fa5]/g

+代表可重复一次或者多次,*代表可重复一次或者多次

/yo{0,8}/g

”^”这个字符在中括号”[]”中有两个涵义
中括号内使用的话就表示字符类的否定,
如果不是的话就是表示限定开头
$一般跟在规则的最后面,代表限定结束按说明规则

最后配送常用的正则表达式以供参考

//正整数
/^[0-9]*[1-9][0-9]*$/;
//负整数
/^-[0-9]*[1-9][0-9]*$/;
//正浮点数
/^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
//负浮点数
/^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/;
//浮点数
/^(-?\d+)(\.\d+)?$/;
//email地址
/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
//url地址
/^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/;
//年/月/日(年-月-日、年.月.日)
/^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$/;
//匹配中文字符
/[\u4e00-\u9fa5]/;
//匹配帐号是否合法(字母开头,允许5-10字节,允许字母数字下划线)
/^[a-zA-Z][a-zA-Z0-9_]{4,9}$/;
//匹配空白行的正则表达式
/\n\s*\r/;
//匹配中国邮政编码
/[1-9]\d{5}(?!\d)/;
//匹配身份证
/\d{15}|\d{18}/;
//匹配国内电话号码
/(\d{3}-|\d{4}-)?(\d{8}|\d{7})?/;
//匹配IP地址
/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/;
//匹配首尾空白字符的正则表达式
/^\s*|\s*$/;
//匹配HTML标记的正则表达式
(\S*?)[^>]*>.*?|< .*?/

哈哈哈,看到这里,我要发送最后一个福利彩蛋
如何用正则匹配判断是一个完整的url呢?

function IsURL(strUrl) {
  var regular = /^\b(((https?|ftp):\/\/)?[-a-z0-9]+(\.[-a-z0-9]+)*\.(?:com|edu|gov|int|mil|net|org|biz|info|name|museum|asia|coop|aero|[a-z][a-z]|((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d))\b(\/[-a-z0-9_:\@&?=+,.!\/~%\$]*)?)$/i
  if (regular.test(strUrl)) {
    return true;
  }
  else {
    return false;
  }
}

业务中的使用场景

过滤

在我们的一般业务中都会遇到需要过滤的字符串,通常的处理方式是使用replace,来配合正则返回我们需要的字符串

如下所示:过滤掉所有html标签

this.formContent.replace(/<[^>]+>/g, '')

最后可以使用test来判断字符串 RegExpObject.test(string),返回值是boolean

替换

stringObject.replace(regexp/substr,replacement)

说明:

字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

拓展:

如果regexp是外部引用的方式,是无法将变量名写进去起效果的,解决效果是使用newRegExp的方式

string.replace(new RegExp(key,'g'),"b");

换位

var name= "Doe, John"; 
name.replace(/(\w+)\s*,\s*(\w+)/, "$2 $1");