JS-限定符号( ^ 和 $ 与 * + ? {n} {n,} {n,m} )

一.限定符号

限定符号
        
边界符
^    表示开头
$    表示结尾

// 以数字开头即可,之后的内容,不做限定
        var reg1 = /^\d/;

console.log(reg1.test('123'));true
console.log(reg1.test('123abc'));true
console.log(reg1.test('abc123'));false

// 以数字结尾,就看结尾,之前有什么内容不管
        var reg2 = /\d$/;

console.log(reg2.test('123'));true
console.log(reg2.test('123abc'));false
console.log(reg2.test('abc123'));true

// 如果开头结尾都加上了,限定效果就不同了
// 只能有一个字符串,并且这个字符是数字   只能有一个数字字符
// 字符个数和内容,只要一个不符合就都不行
        var reg3 = /^\d$/;
console.log(reg3.test('1'));true
console.log(reg3.test('-1'));false
console.log(reg3.test('a'));false
console.log(reg3.test('123'));false
console.log(reg3.test('123abc'));false
console.log(reg3.test('abc123'));false
console.log(reg3.test('123abc123'));false


限定符 限定出现次数
一般都要和边界符配合使用,否则执行效果有问题

*      表示允许的次数是 0 至 正无穷次    有没有都行
+      表示允许的次数是 1 至 正无穷次    至少有一个
?      表示允许的次数是 01          最多有一次
{n}    表示允许的次数是 n 次 ,n的数值 是自定义数值
{n,}   表示允许的次数是 n 次以上,包括n次  最少是n次,多个不管
       也就是 n 至 正无穷 次
{n,m}  表示允许的次数是 n 至 m 次   包括n和m 


// 只能是数字字符,字符个数没有要求
        var reg4 = /^\d*$/;
console.log( reg4.test('1') );true
console.log( reg4.test('') );true
console.log( reg4.test('123') );true
console.log( reg4.test('123abc') );false
console.log( reg4.test('123abc123') );false

// 必须是数字字符,至少出现1个数字字符
        var reg5 = /^\d+$/;
console.log( reg5.test('1') );true
console.log( reg5.test('') );false
console.log( reg5.test('123') );true
console.log( reg5.test('123abc') );false
console.log( reg5.test('123abc123') );false

// 必须是数字字符,最多只能有0个或者1个字符
        var reg6 = /^\d?$/;
console.log( reg6.test('1') );true
console.log( reg6.test('') );true
console.log( reg6.test('123') );false
console.log( reg6.test('123abc') );false
console.log( reg6.test('123abc123') );false

// 只能是3个数字字符
        var reg7 = /^\d{3}$/;
console.log( reg7.test('1') );false
console.log( reg7.test('') );false
console.log( reg7.test('123') );true
console.log( reg7.test('123abc') );false
console.log( reg7.test('123abc123') );false

// 必须都是数字字符,并且至少有一个数字字符
        var reg8 = /^\d{1,}$/;
console.log( reg8.test('1') );true
console.log( reg8.test('') );false
console.log( reg8.test('123') );true
console.log( reg8.test('123abc') );false
console.log( reg8.test('123abc123') );false

// 都是数字,1至3次
        var reg9 = /^\d{1,3}$/;
console.log( reg9.test('1') );true
console.log( reg9.test('') );false
console.log( reg9.test('123') );true
console.log( reg9.test('123abc') );false
console.log( reg9.test('123abc123') );false
互联网上很多不同url都是指向同一页面的,比如: http://tieba.baidu.com/f?kw=%C9%CF%BA%A3%CA%C0%B2%A9%BB%E1 http://tieba.baidu.com/f?kw=%C9%CF%BA%A3%CA%C0%B2%A9%BB%E1&fr=tb0_search http://tieba.baidu.com/f?kw=%C9% … search&ie=utf-8 都指向的是同一页面:http://tieba.baidu.com/f?kw=%C9%CF%BA%A3%CA%C0%B2%A9%BB%E1。 我们需要把不同形式的url规范化,用统一的url代替。目前已经定义了一批规范化规则,你的任务是把一些待处理的url按规则替换成新的url。 每条规则都是一个字符串。为了方便理解,我们定义如下术语: 通配符:字符’#’或者’*‘,以及紧跟其后的长度限定符(可选)。其中’#’匹配数字,’*‘匹配任意字符。 长度限定符:紧跟通配符后,格式为[min-max],表示该通配符匹配的字符个数的最小值最大值,其中 minmax均可以省略(但不能同时省略),当min=max时可以简写为[min]。’#’的默认最小长度为1,’*‘为0。二者的默认最大长度均为 无穷大。例如,”#[3]“表示3个连续数字,’*[3-9]‘表示3到9个任意字符,’*[-8]‘表示0-8个任意字符,’#[7-]‘表示至少七个 连续数字。注意,当通配符的后一个字符为左方括号’[‘时,它总是应当被看作长度限定符的开始标志。 尖括号:成对的小于符号”<”大于符号”>”。尖括号总是两两配对,不存在无法配对的孤立尖括号,且尖括号内部不会出现通配符,也不会嵌套另一对尖括号。 规则片段:在处理规则之前,我们把规则分成若干个连续的片段,每个片段是单个通配符(以及紧随其后的长度限定符,如果有的话)、一对尖括号(以及括号内的字符,如果有的话),或者若干个连续的普通字符(不含通配符尖括号)。为了避免歧义,规则应当被划分成最少 的片段。不难证明,此时的划分方法是惟一的。 例如,规则"abc\*d#[4-7]eeef<gh>i”包含7个规则片段:abc、*、d、#[4-7]、 eeef、<gh>、i。 用某一条规则处理url时,我们遵循以下步骤: 第一步:匹配。首先,忽略含有尖括号的规则片段,用其他片段来匹配url,使得每个片段所匹配的字符串从左到右 连接之后该url完全相等。注意,连接顺序必须按照规则片段的顺序从左到右进行。根据定义,由普通字符组成的片段只能匹配它完全相同的字符串,而通配符可以匹配多样化的字符串,规则如前所述。例如,abc<x>def*[3-5]ghi在忽略尖括号后得到四个片段:abc、def、* [3-5]、ghi,因此,abc<x>def*[3-5]ghi能匹配到的url是那些以abcdef开头,ghi结尾,中间有3到5个字 符的字符串。 如果无法匹配,说明该规则不适用于此url,处理结束;但有时会出现匹配方式不止一种的情况,还需要消除歧义。例如*bc<d>*<xyz>匹配abcabca的方法有两种: 在本题中,如果出现像这样匹配方法不惟一的情况,你应当选择让从左到右第一个通配符匹配字符数最少的方案。如果还有多种方案,再选择其中让第二个通配符匹配字符串最少的方案,以此类推。 在上面的例子中,应选择第一种方案。 第二步:替换。对于每对尖括号,把它左边相邻的url片段替换为尖括号内的 文本,然后连接所有url片段(输入数据保证规则不以左尖括号开头,并且相邻两对尖括号之间至少包含一个字符)。 我们仍然借助上例说明问题: 也就是说,”abcabca”被规则”*bc<d>*<xyz>”处理后变成了”adxyz”。 再举一个实际的例子:*/viewthread.php?tid=#&<>*<> 表示将url文件名为viewthread.php,第一个参数名为tid且参数值为数字时,把其它参数删除。 换句话说,这条规则将把 www.baidu.com/dir/viewthread.php?tid=123&arg=aa 替换为www.baidu.com/dir/viewthread.php?tid=123。 格式 输入格式: 第一行为一个正整数M,说明共有M条规则。第二行为一个正整数N,说明共有N条url。接下来M行,每行代表一条规则,不超过256个字符。 再接下来N行,每行代表一条url。所有URL都去掉了 http:// 头,且不含#*<>四种特殊字符,也不超过256个字符。M<=1000,N<=10000,输入的url规则均不含汉字。 50%的数据保证N<=100,90%的数据保证N<=1000。 输出格式: 输
最新发布
08-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值