首先统计每一个字符出现的次数,并且统计出maxNum的输出
var str = "hsahsjafjshfjshafjksh",obj = {}; str.replace(/w/g,function()){ var key = argument[0]; if(obj[key]>=1){ obj[key]++; return; } obj[key]=1; };console.log(obj);->实现统计每一个字符出现的次数; var maxNum = 0; for (var key in obj){ if(obj.hasOwnproperty(key)){ obj[key]>maxNum?maxNum = obj[key]:null; } } var res = "最多出现"+maxNum+"次 出现的字符:"; for(key in obj){ if(obj.hasOwnproperty(key)){ obj[key] ===maxNum ? res+= key+“ ”:null; } obj = null; console.log(res); }
单词首字母大写
str = "my name is zhou xiao tian,my age is twenty five years old~~"; str = str.replace(/\w+/g, function () { var res = arguments[0]; return res.substr(0, 1).toUpperCase() + res.substr(1); }); console.log(str);
格式化时间//->"2015年05月03日 12时09分13秒" // str = "2015-05-03 12:09:13";// str = str.replace(/^(\d+)-(\d+)-(\d+) +(\d+):(\d+):(\d+)$/, "$1年$2月$3日 $4时$5分$6秒");// console.log(str);
String.prototype.myFormatTime = function myFormatTime() { var reg = /^(\d{4})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:\s+)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})$/g, ary = []; this.replace(reg, function () { ary = Array.prototype.slice.call(arguments, 1, 7); }); var format = arguments[0] || "{0}年{1}月{2}日 {3}:{4}:{5}"; return format.replace(/{(\d+)}/g, function () { var val = ary[arguments[1]]; return val.length === 1 ? "0" + val : val; }); }; str = "2015-5-3 12:9:13"; console.log(str.myFormatTime()); console.log(str.myFormatTime("{0}年{1}月{2}日")); console.log(str.myFormatTime("{1}-{2} {3}:{4}"));
数字转大写//->"贰零壹伍"
str = "2015"; ary = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; str = str.replace(/\d+?/g, function () { return ary[arguments[0]]; }); console.log(str);
1、元字符 [拥有特殊含义的元字符] \d -> 匹配一个0-9的数字,相当于[0-9],和它相反的是\D ->匹配一个除了0-9的任意字符 \w -> 匹配一个0-9、a-z、A-Z、_的数字或字符,相当于[0-9a-zA-Z_] \s -> 匹配一个空白字符(空格、制表符...) \b -> 匹配一个单词的边界 \t -> 匹配一个制表符 \n -> 匹配一个换行 . -> 匹配一个除了\n以外的任意字符 ^ -> 以某一个元字符开头 $ -> 以某一个元字符结尾 \ -> 转移字符 x|y -> x或者y的一个 [xyz] -> x、y、z中的任意一个 [^xyz] -> 除了xyz中的任意一个字符 [a-z] -> 匹配a-z中的任意一个字符 [^a-z] -> 匹配除了a-z中的任意一个字符 () -> 正则中的分组 注意: 1)关于[] a、[+] ->中括号中出现的所有字符都代表的是本身的意思 b、[12-65] ->这个不是12-65而是1/2-6/5三者中的一个 2)关于() a、分组的作用是改变默认的优先级,例如:/^18|19$/,181、189、119、819、1819...都符合,而不是我们认为的18或19,但是改成/^(18|19)$/就是单纯的18或19了 b、可以在捕获大正则匹配的内容同时,把分组匹配的内容也进行捕获->分组捕获 c、分组引用,例如:/^(\d)(\w)\2\1$/,这里的\2是和第二个分组出现一模样的内容,\1是和第一个分组出现一模一样的内容,例如:"0aa0"就符合了 [代表数量的量词元字符] * -> 0到多个 + -> 1到多个 ? -> 0到1个 {n} -> 出现n次 {n,} -> 出现n到多次 {n,m} -> 出现n到m次 注意: 1)关于?的几种情况 a、放在非量词元字符后面,代表出现0-1次 b、放在量词元字符后面,代表取消捕获时候的贪婪性,例如:reg=/\d+/; reg.exec("2015") -> "2015" 但是如果正则这样写 reg=/\d+?/; reg.exec("2015") -> "2" c、在分组开头加?:,代表当前的分组只是匹配不进行捕获,例如:/^(?:\d+)$/ d、在分组开头加?=,正向预查,例如:/^zhufeng(?=1|2)$/ 只有"zhufeng1"和"zhufeng2"才符合 e、在分组开头加?!,负向预查,例如:/^zhufeng(?!1|2)$/ 除了"zhufeng1"和"zhufeng2"不符合,其他的只要是"zhufeng(任何的东西)"都符合 [代表本身意思的元字符] 除了以上的,在字面量方式中,我们出现的其他任意字符代表的都是自己本身的意思 var num=12; var reg=/^\w"+num+"$/; ->这里"+num+"不是把变量的值拼接,而这里的不管是"还是+都是元字符 ->对于需要拼接字符串和变量的方式我们只能使用实例方式创建正则 2、修饰符 i -> ignoreCase 忽略字母的大小写 g -> global 全局匹配 (加上g可以解决正则捕获时候的懒惰性) m -> multiline 多行匹配 3、项目中常用的正则 1)有效数字的 var reg=/^[+-]?(\d|([1-9]\d+))(\.\d+)?$/; 2)邮箱的 var reg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/; 3)电话的 var reg = /^1\d{10}$/; 4)年龄在18-65之间的 var reg = /^((18|19)|([2-5]\d)|(6[0-5]))$/; 5)中文姓名 var reg = /^[\u4e00-\u9fa5]{2,4}$/; 6)身份证 var reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(?:\d|X)$/; //-> 130828(省市县) 1990(年) 12(月) 04(日) 06 1(奇数是男偶数是女) 7(数字或者X) 4、正则的匹配 reg.test([string]) ->true就是匹配成功 false->匹配不成功 5、正则的捕获 1)reg.exec([string]) -> 首先去匹配,匹配成功在捕获,返回的是一个数组; 如果匹配不成功返回的是null; -> 正则的捕获即懒惰又贪婪 -> 解决懒惰性 在正则的末尾增加全局修饰符g -> 解决贪婪性 在量词后面加?
时间: 2024-10-11 05:37:00