『壹』 js正则表达式的如何写这样一个匹配规则!1) 取指定范围的内容 2)过滤指定范围的内容
我只给一个例子你参考,中午时候我在上班没时间帮你写。
<script Language="javaScript">
var str1 = '11111111111abc="sadasda"asdasdabc="111111"nnnnnnn';
document.write(str1.replace(/abc="[0-9a-zA-Z]+"/g,'abc=""'));//替换为空
var str="Visit Microsoft!xyz='abc110'xyz='11'xyz=000xyz='ppp'";
document.write('<br>'+str.match(/xyz='[0-9a-zA-Z]+'/g));
var a = str.match(/xyz='[0-9a-zA-Z]+'/g);
document.write(a[1]);//得到的结果是个数组,这样来获取你想要的那个字符串的值
</script>
你把代码在一个html文本上执行看看结果。正则是不需要jquery的,我不知道你从哪里说正则需要jquery插件的。
懂了就是懂了,早点睡吧。
『贰』 js正则表达式 匹配两个特定字符间的内容
匹配两个特定字符间的内容由以下两种方法:
1.以组形式捕获
Reference:(.*?)About the author //多行模式 捕获组1
以下是java语法
String regex = "Reference:(.*?)About the author"; //此为表达式
String input = ""; //此为待搜索的字符串
Pattern p = Pattern.compile(regex,Pattern.DOTALL); //多行模式
Matcher matcher = p.matcher(input);
ArrayList<String> list = new ArrayList<String>();
if (matcher.find()) {
list.add(matcher.group(1)); //这个地方捕获组1
}
// list 就是搜索的结果
如果是单行模式请注意,表达式应写为:
Reference:((.|
)*?)About the author //单行模式 捕获组1
2.使用零宽断言,表达式如下:
(?<=Reference:).*?(?=About the author)
『叁』 求javascript js正则表达式匹配以@@开头@@结尾,不包含@@的字符串
这个简单。正则表达式:
/@@(.*)@@/;
使用方式:
var
re
=
@@(.*)@@/;
var
result
=
re.exec(str);
如果匹配,result是非空的数组,第一个元素就是不包含@@的字符串。
『肆』 js str.match 正则匹配返回了a,b,c 这是个数组吗怎么变成[a,b,c]形式
是的,这本身是个数组,不需要再变。
『伍』 js正则表达式截取字符串数组
错了好几个地方啊,第一:正则不是全局的,第二:返回的数组中,第一组(下标为 0 的)专为整个属正则匹配的结果,第三:js 的正则在匹配成功后就返回,后面的要再次调用!
varstr='';
varp=/wd*/g;
vars=[],m;
while(m=p.exec(str)){
s.push(m[0])
}
alert("==="+s[0]+"==="+s[1]+"==="+s[2]+"===");
『陆』 JS正则表达式基础认知
正则表达式,又叫规则表达式,英文名Regular Expression,本质是操作字符串
1、模式匹配 表单验证
2、文本检索 搜索
3、替换 过滤
简单,方便,性能高
var reg=new RegExp('规则','模式') 通过构造函数创造
var reg=/规则/模式 通过字面量创建
i 忽略大小写
g 全局
m 多行
注:不分前后顺序
str.match(正则) 返回数组 没有返回 null
str.search(正则) 返回下标 没有返回-1
str.replace(正则,替换成谁) 返回替换后的字符串
str.replace(正则,function(s){
s 符合正则条件的字符串
})
\d 数字 /[0-9]/
\s 空格
\w /[0-9a-zA-Z_]/ 单词
\D 非数字 /[^0-9]/
\S 非空白
\W 非单词 /[^0-9a-zA-Z_]/
.(点) 代表任意
\. 代表.
\\ 代表\
\\\\ 代表\\
\/ 代表/
只要有特殊意义的都要转译
+ {1,m} 若干个 最少1个最多不限
? {0,1} 可有可无
* {0,m} 可以没有,多了不限
{n} 正好n个
{n,m} 最少n个 最多m个
{n,} 最少n个,最多不限
{,m} × 没有这种写法
^ 行首
注:如果^单独使用,代表字符串行首,配合m使用会识别段落
$ 行尾
[] 中括号
1、[]里面的东西都是或的形式
2、[]里面和放范围
3、[^] 不代表行首,代表除去里面的范围
4、其他特殊符号代表本身
1、test() 一般配合^ &
功能:用于检测是否于正则匹配。
返回:布尔值,true匹配,false不匹配
语法:reg.test(检测的内容)
2 exec()
功能:用于检测是否于正则匹配。
返回:数组, 不匹配返回null
语法:reg.test(检测的内容)
再做验证之前:验证分两种,一种强校验,一种弱校验
(1)验证手机号 /1[23457]\d{9}/
(2)验证座机号 区号-座机号 /(0[1-9]\d-)?[1-9]\d{7}/
(3)验证qq /[1-9]\d{4,11}/
(4)实现一个trim函数 去掉收尾空格 /^\s+|\s+$/g
(5)中文 /[\u4e00-\u9fa5]/
(6)验证年龄 18-100 /^1[89]|[2-9]\d|100$/
(7)邮箱: [email protected] /^\w{5,12}@[a-z0-9]{2,8}\.com$/
(8) 过滤html /<[^>]+>/g;
1、分组 ab+ abbbb (ab)+
2、匹配子级
配合replace使用 str.replace(reg,function(s,a,b){
s是 整体
a是第一个括号的项
b是第二个括号的项
})
3、优选级 ^(1[89]|[2-9]\d|100)$
4、重复的子项
abbb /(a)(b)\2+/
今天先给大家总结到这儿,后续还会有补充
『柒』 js正则表达式问题:匹配<TD>....<BR>.....</TD>的串的正则表达式如何写
/[\s\S]*?
[\S\s]*?/g
加g
是匹袭族仔配所有符拍汪合的
返回的是一个数组,,
不加G返回第一个穗则匹配的数据
『捌』 js数组和正则表达式
RegExp()的第二个参数主要支持g,i,m这3个修饰性字符
字符g,用来指定全局匹配
字符 i ,是用来指定大小写为等同;
字符 m 是多行一词的缩写,设置匹配模式能够在多行字符串中执行操作
var a = "javasssss";
var s = new RegExp("a","gi");
alert(a.match(s));
返回值为a,a
var a = "javasssss sssswww aaaaa";
var s = new RegExp("\\b\\w","gi");
alert(a.match(s));
返回值为j,s,a
\\b\\w是一个匹配模式,其中反斜杠表示转义序列,而双斜杠表示的是斜杠的意思,\b表示边界的意思\w表示的任意的ASCii码,指的就是每一个单词的首字母;
var a = "javasssss sssswww aaaaa";
var r=new RegExp("\\x61");
var s=a.match(r);
alert(s);
x61表示的是a的十六进制的ascii码,除了十六进制以外,还可以直接使用八进制数值来匹配例如;
var a = "javasssss sssswww aaaaa";
var r=new RegExp("\\141");
var s=a.match(r);
alert(s);
js中的特殊字符
\o表示空字符
\t表示制表位
\n表示换行符
\v表示垂直制表符
\f表示换页符
\r表示回车符
\a表示alert字符
\e表示escape字符
\b表示回退字符
\cX表示控制自负^x
对于这些特殊的字符,如果在RegExp构造函数中使用,必须使用双斜杠表示专业。
定义简单的字符类
var a = "javasssss sssswww aaaaa";
var r=new RegExp("[abcsw]","gi");
var s=a.match(r);
alert(s);
返回值为
查找字符串中是否有字符类中的字母
定义反义字符类
var a = "aba abd abg abe";
var r=new RegExp("ab[^abc]","gi");
var s=a.match(r);
alert(s);
返回值为
第三个字符表示除了a,b,c以外的字符都可以
var r= new RegExp("[^012345679]","gi");
匹配除了数字以外任意的字符。反义字符类比简单字符类更加强大和实用
如果任意双字节的汉字,你可以这样设计
var r=new RegExp("\\u0000-\\u00ff","gi");
预定义字符类
『玖』 js正则匹配总结
js匹配是js中比较重要的一个概念,我们在工作中经常用到,但是往往都是记得不是很清楚,或者有些遗忘,这次记录总结一下,让自己加深一下印象,同时也会小伙伴们提供查阅资料的地方
正则匹配模式分为两种,一种是贪婪模式,另一种是非贪婪模式
贪婪模式:在遇到歧义时候尽可能的多的匹配符合的结果
非贪婪匹配:在遇到歧义时候匹配到一次符合的结果就不匹配了
js默认是贪婪匹配模式,贪婪模式变成非贪婪模式只需要在贪婪量词({n, }, {n, m}, + , ?, *)后面加一个?就行了
附加: 正则匹配中?的几种用法
正则匹配的前瞻就是给正则匹配的选项定义一个断言,或者说是一个条件比如:我要匹配一个字母,但是我的需求是字母后面必须是跟着一个数字的情况,那么这种场景是怎么实现了,就是用到前瞻的概念,那么我想要他的前面也要是一个数字怎么办了,这就是后顾。
前瞻后顾的描述
正则匹配新特性
以上的三个匹配形式都是不被捕获的,其中前两个是不匹配的,他只是用来当作条件来用,第三个是要被匹配的
1:任何元字符在没有写量词的情况下,只匹配一次
2:写了量词,默认是贪婪匹配
3:正则匹配一旦全部找到就不会在继续去匹配,除非你设置了全局g
4:正则匹配按照匹配规如果中间中断没有匹配到,并且字符串没有匹配完,会继续按照匹配规则重新匹配
5:(pattern)如果匹配到了很多结果,只捕获最后一次匹配到的结果
6:任何量词都只作用于前面的元字符
1:source 2:global 3:ingoreCase 4:multiline 5:lastIndex
字符串满足正则匹配规则就会返回true,但是如果正则匹配里面含有全局的话,那么多运行几遍会报错,因为正则每次匹配开始都是看lastIndex的,全局情况下lastIndex每次执行都会被改变
如果没有找到任何匹配就返回null,如果找到了则返回一个数组,exec方法返回的数组的第 0 个元素是与正则表达式相匹配的文本
第 1 个元素是 正则匹配到 的第 1 个子表达式相匹配的文本(如果有的话)
第 2 个元素是正则匹配到 的第 2 个子表达式相匹配的文圆哪本(如果有的话)
...
以此类推。
其中还有三个参数
index:表示匹配到橘饥码的文本的第一个字符所在的索引位置
input: 表示被匹配的文本
groups:表示有名的分组
在全局下也是一样因为exec永远只返回第一个匹配。
如果没有找到任何匹配就返回null,如果找到了则返回一个数组,match方法返回的数组的第 0 个元素是与正则表达式相匹配的文本
第 1 个元素是 正则匹配到 的第 1 个子表达式相匹配的文本(如果有的话)
第 2 个元素是正则匹配到 的第 2 个子表达式相肢孝匹配的文本(如果有的话)
...
以此类推。
其中还有三个参数
index:表示匹配到的文本的第一个字符所在的索引位置
input: 表示被匹配的文本
groups:表示有名的分组
在非全局的情况下,这个方法和exec一模一样,但是在全局的情况下,差别很大,在全局的情况下,只会返回匹配到的结果,并且lastIndex始终为0, 如果没匹配到就返回null
该方法用来替换字符串,第一个参数是正则表达式,第二个参数可以是字符串也可以是函数
正则匹配测试工具
『拾』 JS正则表达式详解
RegExp是JS的正则表达式对象,实例化一个RegExp对象有 字面量 和 构造函数 2种方式。
字面量实例化RegExp对象
var reg=/js/gi;
开始和结束的斜线/是正则表达式的边界,//中间的文本是正则表达式文本,后面的gi是正则表达式的修饰符。
构造函数实例化RegExp对象
var reg=new Regex(‘js’,’gi’);
第一个参数是正则表达式文本,第二个参数是正则表达式修饰符。
global:RegExp 对象是否具有标志 g。
ignoreCase:RegExp 对象是否具有标志 i。
lastIndex:一个整数,标示开始下一次匹配的字符位置。
multiline:RegExp 对象是否具有标志 m。
source:正则表达式的源文本。
RegExp 对象有 3 个方法:test()、exec() 以及 compile()。
test()
test() 方法检索字符串中的指定值。返回值是 true 或 false。
示例:
var reg=/js/gi;
var result=reg.test(‘I like js’);
结果:true
exec()
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
示例:
var reg=/js/gi;
var result=reg.exec(‘I like JS’);
结果:JS
compile()
compile() 方法用于改变 RegExp。
compile() 既可以改变检索模式,也可以添加或删除第二个参数。
g:global全文搜索,如果不添加此参数,搜索到第一个匹配就会停止
i:ignore case 不区分大小写,默认是区分大小写的
m:multiple lines 多行搜索,默认只搜索第一行
正则表达式文本部分包含 原义文本字符 和 元字符, 其中的原义文本字符代表字符本身意义的字符,如abc123之类的字符。
元字符代表有特殊含义非字母字符,如、w、d、+、*、? 等。
常用的元字符
更多的JS正则元字符请参考: http://www.runoob.com/regexp/regexp-metachar.html
一般情况下正则表达式中的一个字符对应字符串中的一个字符,如表达式ab的含义是ab。
表达式中用 [] 来定义一个字符类,表示可以匹配[]里面的这类字符,是一个泛指,而不是一一对应的关系。
如表达式[abc123],表示有其中一个字符串都可以匹配。
在字符类里面使用横线-连接2个数字或者字母就可以构建一个范围类,如[a-zA-z0-9-]表示可以匹配26个大小写字母和0-9的全部数字以及横线-。
注意,要匹配横线”-“,必须把横线放在最后面。
预定义类可以理解为JS默认给我们写好的范围类,让我们可以使用一个简单的元字符来使用它。如”w”就是一个预定义类,它等价于范围类[A-Za-z0-9_];“.”可以匹配除 “ ” 之外的任何单个字符。
边界包含2种,一种是以字符串开始或结尾的边界,另一种是单词边界
量词表示可以匹配连续多次的元字符
JS正则表达式默认是贪婪模式匹配,它会以最多匹配原则进行查找,非贪婪模式可以让表达式以最少匹配原则进行查找。
非贪婪模式只需要在量词后面加上”?”即可,如”123456789″字符串想以3个数字为一组进行匹配表达式写法/d{3,5}?/g。
表达式中用 () 来定义一个分组,使元字符可以作用于一个表达式字符串组合,如/(js|php){3}/gi。
表达式中的每一个分组匹配的内容都是一个可以捕获的变量,可以使用$1、$2、$3… 来取值,如表达式/(d{4})-(d{2})-(d{2})/中包含$1、$2、$3。如果想忽略分组匹配的内容,需要在分组前面增加“?:”,就可以得到分组匹配之外的内容。
前瞻就是正则表达式后面加上断言部分,它不但要匹配表达式部分,还需要满足断言部分,匹配的结果不会包含断言部分。
正向前瞻 exp(?=assert) 如 “w(?=d)”
负向前瞻 exp(?!assert) 如 “w(?!d)”
match()
stringObject.match(regexp)
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。
如果没有找到任何匹配的文本, match() 将返回 null。
否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。
search()
stringObject.search(regexp)
search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。
replace()
stringObject.replace(regexp/substr,replacement)
字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
split()
stringObject.split(separator,howmany)
如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)
正则表达式语法语意测试工具: https://regexper.com/