JavaScript正则表达式中 ?: 是什么意思?

js中正则表达式中的?:什么意思。好像没有什么用处~

如果用在( )中最开头的地方,即: (?:xxxxx) 只是将()中的内容分组【一般括号后面有*或+等修饰】, 不进行捕获(也就是不将括号中的内容保存在 \1 、 \2这样的变量中)。
其他地方——?可以修饰?之前的字符,表示可选,前面的字符存在或不存在都能匹配,
比如(wo)?man ——可以匹配man和woman。而冒号匹配冒号本身。
例如:says?: \w 可以匹配
He [says: H]ello! 或 I [say: H]ello! #注:匹配[]中的内容

在JavaScript中,正则表达式通常用于两个字符串方法:search()和replace()。
search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。



正则表达式的特点是:
1、灵活性、逻辑性和功能性非常强;
2、可以迅速地用极简单的方式达到字符串的复杂控制。
3、对于刚接触的人来说,比较晦涩难懂。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。

“?:”是“非获取存储匹配”的意思

“ ?:” 只在一个“()”group中,紧贴着“(”出现,例如“(?:abcdefg)”,不同于“ ? ”, “?: ”不是一个量词,但是与“()”共同构造一个元字符,这个元字符所匹配出来的结果,不会保留,也不能参与诸如替换计算等等的操作。(这个操作在服务端多见一些,前端用的不多)(javascript只有string对象的replace方法能用到这个功能)

简单来说,就是你的正则表达式如果用不着在javascript里面使用replace方法,“?:”就可以省去(当然,看个人喜好和排版习惯,还有调试中的页面响应速度,如果加了“?:”反而更快,那就用吧)。

这么说起来还是比较抽象,用实例代码来说明吧。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>

<p>将匹配的数字增加后缀“9”</p >

<p class="demo">/(\d+)/gi:A23G4HFD567.</p >
<p class="demo">/(?:\d+)/gi:A23G4HFD567.</p >

<button onclick="myFunction()">点我</button>

<script>

function myFunction(){

var e=document.getElementsByClassName("demo");

var str=e[0].innerHTML;

var n=str.replace(/(\d+)/gi,"$19");
e[0].innerHTML=n;


str=e[1].innerHTML;

var n=str.replace(/(?:\d+)/gi,"$19");
e[1].innerHTML=n;

}


</script>

</body>
</html>

<!---->

<!--在实例里面“$1代表第一个“()”所匹配的结果-->

点击“点我”按钮前

点击“点我”按钮后

可以看到“/(\d+)/gi”所匹配的结果被用于扩展替换字符串中的“$1”;

但是“/(?:\d+)/gi”所匹配的结果没有被用于扩展替换字符串中的“$1”,尽管,它也成功地找到了被查找字符串中的数字,显然结果没有被保留。

对了,类似的问题,可以用这种办法去对比验证。(比如“?=”、“?!”、“?<=”、“?<!”是什么意思……)

上图是在菜鸟教程找到的一个比较全面的正则表达式的元字符列表的部分:https://www.runoob.com/regexp/regexp-metachar.html

还有,不同软件的正则表达式的可能有不同的特性,但是目前perl的正则表达式是公认最多特性的。



1.什么 是正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
正则表达式并不是属于某种语言的,它是一门独立的语言,几乎在所有的编程语言中都提供了相关支持(Javascript、PHP、Java、C++)
以SQL语言为例:搜索功能
精准匹配:
\$sql = “select * from goods where title=’Nokia N95’”; //返回某个固定的结果
模糊匹配:
\$sql = “select * from goods where title like ‘%Nokia N95%’”; //返回某种满足条件的结果
所以由此可知,正则表达式也是一种模糊匹配。
2.正则 表达式应用场景
① 数据隐藏 李先生 一等奖 139****635
② 数据验证 手机验证、邮箱验证、IP地址验证
③ 数据采集 网站后台都可以集成一个按钮(数据采集)
④ 数据检索
3.快速入门
1)查找一个字符串中是否具有数字“8”
运行结果:
2)查找一个字符串中是否具有数字
运行结果:
3)查找一个字符串中是否具有非数字
运行结果:

JS的正则表达式如何使用
答:*,+,{n,m})? : 非贪婪匹配模式,尽可能少的匹配,例如“z+”可以匹配“zzzzz”,“z+?”只匹配到“z”. : 匹配除\r\n外任何单个字符(pattern) : 匹配pattern,并获取匹配,可以获取匹配到的结果,用\1-\9表示,例如“(o)”匹配到“o”,“(o)\1”匹配到“oo”,...

js 正则表达式验证 只能输入大于等于1,小于等于20000000的整数。整 ...
答:- `\d{0,6}` 匹配0到6位数字。- `(?:\.\d{1,2})?` 表示可选的小数部分,包括小数点和1到2位小数。- `20000000(?:\.0{1,2})?` 表示20000000这个特定整数,可以带两位小数。- `$` 表示匹配结束位置。下面是一个使用 JavaScript 的示例代码,演示如何使用正则表达式进行验证:function ...

javascript中正则表达式中的“+”什么意思,求答案详细一点,我理解力...
答:例1:reg=/^s+$/;s,ss等都可以匹配成功。例2:reg=/^(abc)+$/;abc,abcabc能匹配成功,而abcab不能匹配成功。如果改为reg=/(abc)+/g;abcab也能匹配成功。^表示以什么开始,$表示以什么结束。如果没有这两个标记,或者只有其中一个,则正则匹配就不会要求以目标字符串开始或结束。只要...

/正斜杠在javascript正则表达式中怎么表示?
答:/正斜杠在javascript正则表达式中可以\/表示,比如 var reg = /\//;正则表达式中转义字符是\(反斜杠),正则表达式中要匹配一下字符本身时需要转义:,匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n' 或 ‘\r'。要匹配 $ 字符本身,请使用 \$。( )...

js的正则表达式要求必须字母与数字组合至少有一个大写字母,要怎么写...
答:必须要有字母和数字,且至少有一个大写字母的js正则表达式如下 /^(?=.*?[A-Za-z]+)(?=.*?[0-9]+)(?=.*?[A-Z]).*$/ 我给你个Javascript程序的例子,你看看吧. var str='123Aabc'; var regex=/^(?=.*?[A-Za-z]+)(?=.*?[0-9]+)(?=.*?[A-Z]).*$/ var a=regex...

javascript 正则表达式字符个数的问题
答:/^(\d+[a-zA-Z]?){5}$/ 这个正则表达式,如果不加后面的{5},匹配以数字开头的一个或者多个数字,后跟着1个或者0个字母,如果加上{5},则匹配至少以5个数字开头的五个或多个数字,另外中间和后面可能会有0个或多个字母 /^(\d+[a-zA-Z]?){5}$/ 等同于正则表达式/^(\d+[a-zA-...

JS 正则表达式 匹配两个字符串之间的字符串
答:Javascript正则表达式 /\((.+?)\)(.+?)\(\/\1\)/ig完整的匹配两个字符串之间的字符串的Javascript程序如下 var str='(pl)\n(lc)1 (/lc)\n(nr)为什么 (/nr)\n (zz)组长 (/zz) \n (rq)2017-06-24 15:03:56.0 (/rq)\n(/pl)\n(pl)\n (lc)2 (/lc)\n (nr)我要吃...

javascript正则表达,获取域名和前缀
答:回答:var arr = url.replace("http://","").split("."); if(arr.length==3) alert(arr[0]+","+arr[1]+","+arr[2]); else alert("\"\""+","+arr[1]+","+arr[2]);

JavaScript 正则表达式语法中 $ 表示什么意思?
答:javascript正则表达式/g与/i及/gi的意义 regularexpression=/pattern/[switch]这个switch就有三种值 g: 全局匹配 i: 忽略大小写 gi: 以上组合 //就像"",中间的_是正则表达式的模式,名面的g是选项,声明匹配的方式,其实好像就是将_换成$,个人意见,供参考。

在js中正则表达式如何判断用户输入的内容只能是数字和字母
答:2、$表示匹配字符串的尾字符。3、\d表示匹配数字。4、a-z表示匹配任意英文字母。5、[]是集合的意思,表示一个字符是[]中任意一个。6、+表示匹配1个或1个以上,[]+表示匹配[]中的1个以上字符。7、表达式后面的i表示忽略大小写。8、test函数用于验证字符串是否满足正则表达式,如果满足该正则表达...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网