JavaScript语法自测(正则表达式)

var expression = / pattern/flags

g全局,i不区分大小写 case-insensitive m multiline多行
() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。
(\s)表示连续空格的字符串。
[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s
]表示空格或者号。
{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配一到三个空格。
(0-9) 匹配 '0-9′ 本身。 [0-9]
匹配数字(注意后面有 *,可以为空)[0-9]+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。
[0-9]{0,9} 表示长度为 0 到 9 的数字字符串。
.表示任意一个字符
*表示0到无穷
+表示1到无穷
?表示懒惰匹配
|或者
^开始
$结束
(?: )表示一个非捕获型分组:即在这个括号内的,但是不在其子括号内所匹配到的字符将不放入结果数组中。

最后检查各个转义字符

如果是new RegExp(str,patter)
5.4.1 RegExp实例属性
RegExp 的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
 global:布尔值,表示是否设置了g 标志。
 ignoreCase:布尔值,表示是否设置了i 标志。
 lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0 算起。
 multiline:布尔值,表示是否设置了m 标志。
 source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

在ECMAScript 3 中,
正则表达式字面量始终会共享同一个RegExp 实例,而使用构造函数创建的每一个新RegExp 实例都是一个新实例

数字

  it('you should be able to detect a number in a string', function() {
    expect(regexAnswers.containsNumber('abc123')).to.eql(true);
    expect(regexAnswers.containsNumber('abc')).to.eql(false);
  });

\d表示数字

 containsNumber: function(str) {
    return /\d+/.test(str);
  },

重复字母

  it('you should be able to detect a repeating letter in a string', function() {
    expect(regexAnswers.containsRepeatingLetter('bookkeeping')).to.eql(true);
    expect(regexAnswers.containsRepeatingLetter('rattler')).to.eql(true);
    expect(regexAnswers.containsRepeatingLetter('ZEPPELIN')).to.eql(true);
    expect(regexAnswers.containsRepeatingLetter('cats')).to.eql(false);
    expect(regexAnswers.containsRepeatingLetter('l33t')).to.eql(false);
  });

()用来选取字符串,
\1表示重复正则第一个圆括号内匹配到的内容
\2表示重复正则第二个圆括号内匹配到的内容

  containsRepeatingLetter: function(str) {
    return /([A-Za-z])\1/.test(str);
  },

元音字母结尾

it('you should be able to determine whether a string ends with a vowel (aeiou)', function() {
    expect(regexAnswers.endsWithVowel('cats')).to.eql(false);
    expect(regexAnswers.endsWithVowel('gorilla')).to.eql(true);
    expect(regexAnswers.endsWithVowel('I KNOW KUNG FU')).to.eql(true);
  });

正则表达式中/i,/g,/ig,/gi,/m的区别和含义
/i (忽略大小写)
/g (全文查找出现的所有匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)
^用来开头 $用来匹配结尾

  endsWithVowel: function(str) {
    return /[aeiou]$/i.test(str);
  },

三个数字匹配

  it('you should be able to capture the first series of three numbers', function() {
    expect(regexAnswers.captureThreeNumbers('abc123')).to.eql('123');
    expect(regexAnswers.captureThreeNumbers('9876543')).to.eql('987');
    expect(regexAnswers.captureThreeNumbers('abcdef')).to.eql(false);
    expect(regexAnswers.captureThreeNumbers('12ab12ab')).to.eql(false);
  });
  captureThreeNumbers: function(str) {
    var match = /\d{3}/.exec(str);
    return match?match[0]:false;

  },

满足某种格式

it('you should be able to determine whether a string matches a pattern', function() {
    // the pattern is XXX-XXX-XXXX where all X's are digits
    expect(regexAnswers.matchesPattern('800-555-1212')).to.eql(true);
    expect(regexAnswers.matchesPattern('451-933-7899')).to.eql(true);
    expect(regexAnswers.matchesPattern('33-444-5555')).to.eql(false);
    expect(regexAnswers.matchesPattern('abc-def-hijk')).to.eql(false);
    expect(regexAnswers.matchesPattern('1800-555-1212')).to.eql(false);
    expect(regexAnswers.matchesPattern('800-555-12121')).to.eql(false);
    expect(regexAnswers.matchesPattern('800-5555-1212')).to.eql(false);
    expect(regexAnswers.matchesPattern('800-55-1212')).to.eql(false);
  });
  matchesPattern: function(str) {
    return /^\d{3}-\d{3}-\d{4}$/.test(str);
  },

货币格式匹配


  it('you should be able to detect correctly-formatted monetary amounts in USD', function() {
    expect(regexAnswers.isUSD('$132.03')).to.eql(true);
    expect(regexAnswers.isUSD('$32.03')).to.eql(true);
    expect(regexAnswers.isUSD('$2.03')).to.eql(true);
    expect(regexAnswers.isUSD('$1,023,032.03')).to.eql(true);
    expect(regexAnswers.isUSD('$20,933,209.93')).to.eql(true);
    expect(regexAnswers.isUSD('$20,933,209')).to.eql(true);
    expect(regexAnswers.isUSD('$459,049,393.21')).to.eql(true);
    expect(regexAnswers.isUSD('34,344.34')).to.eql(false);
    expect(regexAnswers.isUSD('$,344.34')).to.eql(false);
    expect(regexAnswers.isUSD('$34,344.3')).to.eql(false);
    expect(regexAnswers.isUSD('$34,344.344')).to.eql(false);
    expect(regexAnswers.isUSD('$34,344_34')).to.eql(false);
    expect(regexAnswers.isUSD('$3,432,12.12')).to.eql(false);
    expect(regexAnswers.isUSD('$3,432,1,034.12')).to.eql(false);
    expect(regexAnswers.isUSD('4$3,432,034.12')).to.eql(false);
    expect(regexAnswers.isUSD('$2.03.45')).to.eql(false);
  });

? 是 单字符匹配 * 是 多字符匹配,$和.符号需要转义

  isUSD: function(str) {
    return /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/.test(str);
  }

正则 实现trim

reg = /(^\s+)|(\s+$)/g

正则匹配网址,http,https

var pattern = /^http(s)*:\/\/([\w-]+\.)+([\w-]+)(\/){0,1}(#([\w-]+)){0,1}$/i
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容