js正则 匹配字符串中除了某些字母之外的所有字符
var reg=/[^Abc]+/;
var result=reg.exec(str);
if(result==null)
{
alert('请重新输入');
}else{
alert(result);
}
这个例子本意是输出'A','b','c' 之外的任意一个字符,但是运行结果为‘ ’,只有一个空格。
请教大神这是为什么? 展开
要用String对象的match方法,而且正则匹配模式要写成全局匹配。
<br>var str="A b c i am A man A BAB";<br>var reg=/[^Abc]+/g。
<br>//var result=reg.exec(str);<br>var result=str.match(reg);<br>if(result==null)<br>。
{<br>alert('请重新输入');<br}else{<br>alert(result.length);<br>}。
扩展资料:
JavaScript是一种脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行。直译语言的弱点是安全性较差,而且在JavaScript中,如果一条运行不了,那么下面的语言也无法运行。而其解决办法就是于使用try{}catch(){}。
Javascript被归类为直译语言,因为主流的引擎都是每次运行时加载代码并解译。V8是将所有代码解译后再开始运行,其他引擎则答咐是逐行解译清猛纯(SpiderMonkey解译过的指令暂存,以提高性能,称为实时编译)。
但由于V8的核心部分多数用Javascript撰写(而SpiderMonkey是用C++),因此在不同的测试上,两者性能互有优劣。与其相对应的是编译语言,例如C语知瞎言,以编译语言编写的程序在运行之前,必须经过编译,将代码编译为机器码,再加以运行。
参考资料来源:百度百科-javascript
推荐于2017-11-25 · 知道合伙人互联网行家
你好,
exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象运迹的方法更为复杂。
如果 exec() 找到了匹配的文本,则返回一个结果数组。(【问题注解】找到一个就返回,所以你的第一个是空格,你的/[^Abc]+/是可以匹配空格的,所以就返回了一个空格~)
否则,返回 null。
此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性歼悄亩。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。
但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
可氏森以改成如下循环输出结果:
var str="A b c i am A man A BAB";
var reg=new RegExp("[^Abc]+","g");
while((result=reg.exec(str))!=null){
alert(result);
}
var str="A b c i am A man A BAB";
var reg=/[^Abc]+/g;
//var result=reg.exec(str);
var result=str.match(reg);
if(result==null)
{
alert('请重新输入');
}else{
alert(result.length);
}