1.匹配以数字开头,并以 abc 结尾的字符串。:
var str = "123abc"; var patt1 = /^[0-9]+abc$/; document.write(str.match(patt1));
以下标记的文本是获得的匹配的表达式:
123abc
知识点:
^ 为匹配输入字符串的开始位置。字符串的首个字母 [0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。 abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。
2.我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符(-),并设置用户名的长度,我们就可以使用以下正则表达式来设定。
{} 表示长度
3.+ * ?的区别
runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。 runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。 colou?r 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次、或1次)。
4.特别字符
特别字符 描述 $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ' ' 或 ' '。要匹配 $ 字符本身,请使用 $。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。 * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。 + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 . 匹配除换行符 之外的任何单字符。要匹配 . ,请使用 . 。 [ 标记一个中括号表达式的开始。要匹配 [,请使用 [。 ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。' ' 匹配换行符。序列 '\' 匹配 "",而 '(' 则匹配 "("。 ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 ^。 { 标记限定符表达式的开始。要匹配 {,请使用 {。 | 指明两项之间的一个选择。要匹配 |,请使用 |。
5.以下正则表达式匹配一个正整数,[1-9]设置第一个数字不是 0,[0-9]* 表示任意多个数字:
/[1-9][0-9]*/
6.如果你想设置 0~99 的两位数,可以使用下面的表达式来至少指定一位但至多两位数字。
/[0-9]{1,2}/
上面的表达式的缺点是,只能匹配两位数字,而且可以匹配 0、00、01、10 99 的章节编号仍只匹配开头两位数字。
改进下,匹配 1~99 的正整数表达式如下:
/[1-9][0-9]?/
或
/[1-9][0-9]{0,1}/
7.定位符
字符 描述 ^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 或 之后的位置匹配。 $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 或 之前的位置匹配。 匹配一个单词边界,即字与空格间的位置。 B 非单词边界匹配。
8.ctf题目
通过读代码可以看出只要我们构造出符合正则表达式的字符串通过GET传参传过去就可以看到 key 即 flag
通过这道题看了很多正则表达式的语法规则……
首先分析这道题:
定界符:/和/(一般来说是这两个,其实除了和字母数字其它的只要是成对出现都可以看做定界符,比如##、!!之类的);
. (一个点):表示可以匹配任何字符;
* :前面的字符重复零次或多次;
{n,m} :前面的字符重复4~7次;
(反斜线):后面的字符被转义;
[a-z] :在a到z中匹配 ;
[[:punct:]] :匹配任何标点符号;
/i :表示这个正则表达式对大小写不敏感;
至此,我们可以对这道题的正则表达式进行构造。
例如:keyakeyaaaakey:/a/aakeyb!
有很多只要符合都可以