java和js正则的区别

JavaScript014

java和js正则的区别,第1张

?!表示当前内容右边不包含这些字符

例如

表达式: a(?![a-zA-Z]+)

匹配字符串: abc a acd a1

匹配后的结果就是 a 和 a1 , 因为 匹配要求是 包含a,但a的右边不能包含任何[a-zA-Z]的字符.

Java里由于字符串中的\需要先转义,所有只要是写\都是两个\

因此\\d 就是 javascript里的\d

语法没区别,在Java Script里边一般是通过a.test(正则)

来判断a是否符合要求,

至于调用那就是JS如何调用的问题了

和正则没关系.

刚好你问的我都不陌生,挑战一下我的理解力与总结能力。

首先说明两门语言不一样,除了有java这个字,语句块的表达一样外几乎没啥共同性。javascript只因单年java太流行,自己也跟着有个java的名称,设计javascript的人初衷的确想弄的跟java一样,但是做不到。

javascript是解释执行的,需要宿主环境来执行,比如浏览器就是一个宿主环境,node.js提供的javascript也是个宿主环境,还有adobe pdf也提供了javascript的宿主环境,javascript的宿主环境很多,windows office 苹果的store有。再余下的还有不知道了。

java编译执行的,最先设计用来,给美国的有线电视机顶盒,写控制代码,发明之初100多两百个类,比现在好学,运行环境要求也不严格。很小的内存,很少的cpu资源就可以跑起来,怀念可惜这方面的功能我不会用。后来java的设计团队觉得,java应该有更大作为。在浏览器开发设计盛行的90年代,java的设计者用java开发过浏览器,在浏览器上发展applet,可惜微软不待见java,java在浏览器方面的努力,再牛(我看过很多java方面的书,很多设计理念都很好,只可惜运行平台不是自己的),也失败了。最终java实现了跨平台发展,这才是java的活力所在。所谓跨平台虚拟机也要有人提供,sun公司自己写的虚拟机还行。见过hp-unix上跑的虚拟机问题不少!!!

javascript规范里面说明,javascript是非类型安全的。而java是类型安全的,区别很大。

上个例子:

js:

var myLover = true

console.log(myLover)

myLover = "myself"

console.log(myLover)

js这样写不会有问题的,同一变量可存储逻辑值,也可存储字符串。甚至再放函数引用也行,对象引用也可以。

java:

public class TestDriver {

public void main(String[] args)

{

String s = "myLOver"

//下面会出错的,编译都通不过,s只能存储字符串型的数据,这就是所谓的类型安全!

//s = true

System.out.println(s)

}

}

java我的理解一门真正的编程语言,语法结构严谨,必须按照一定规则写,否则就是错误。javascript语法松散,缺个没事的,javascript支持运行时的动态特性,比如运行时添加方法,成员等等。java没这特性,java的运行时动态性,我知道的主要是反射(牺牲了语言的安全性,很多功能都依赖反射,还不好理解!),比如动态代理,json、xml、orm框架实体与数据之间的自动转化都需要反射支持。反射不安全在于,可以随便访问类或实例的任何成员,任何方法,包括申明为private的域与方法。

铺垫了这么多,来回答你想知道的问题。

先说函数,函数只有javascript中才有,java中绝对没有函数。java是真正面向对象的语言,要想使用的基本功能,在java.lang与java.util这两个包中去找,全部是以类的方式提供。这里没有绝对,函数也好,类中的方法也好,实现思路有可能是通用的。javascript也可以实现面向对象编程,但我见到老点的代码,都函数式面向过程编程。直到学jquery的时候才看到面向对象编程方法。但我不喜欢,jquery的扩展方式。javascript面向对象方式amd值得推崇,dojo框架用的就是amd,还有国内阿里的前端工程师更牛融合jquery与amd的优点,自己创建了一个效率很不错的框架。

再说正则表达式:

js里面的正则表达式两种方式使用:

第一、用法较常见,包括js框架中都这种用法,我采纳的这种用法。

var regExp = /^http:\/\//gi

var isUrl = regExp.test("http://www.baidu.com/register")

console.log(isUrl)

第二种、用正则表示对象,这块不常用,要写样例还需要查api参考,不给了。

java常用的正则表达式也是两种:

第一种、java.util包中提供的,这个也要查api不谢样例了;

第二种、第三方提供的,传说效率很高,我倒是没发现。名字忘记了,我一般用spring中用的那个,平时写的程序不在这台电脑上,不好查,抱歉。

javascript 与 java的正则表达式本身相同的,如果你会用javascript写正则,那么一定也很快会使用java写正则,两门语言对正则的支持都很完美,几乎支持正则中的所有功能,我所有项目中使用的正则没有匹配不了的。两门语言在现代机器上执行效率都很好。

数组,javascript只支持一维数组,但是可以模拟出多维数组:定义如下:

var mutipleArray = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]

for(var i=0i<mutipleArray.lengthi++)

{

for(var j=0j<mutipleArray[i].lengthj++)

{

console.log(mutipleArray[i][j])

}

console.log("**************************")

}

java的数组,可支持多维数组,但一般用得少一点,一般都用List借口的实现类顶替。

javascript的数组,什么都可以存储,无论是对象,函数,原始类型,没有要求的,所谓类型不安全!

java的数组只能存储特定的类型,java.lang.Object,可以存任何对象类型,特例不要钻牛角尖,基本类型与Object类型混合存就不行,自动打包的功能不要说,这也是特例。

从上面的比较来看,java与javascript的数组,不太一样,语言本身就决定了他们两连使用都不能相通。javascript数组有队列,排序,删除指定序列的操作功能,我的理解一个大杂烩,用数组的功能也可以实现类似list,map,迭代等等功能,参见jquery框架。java的队列有专门的实现类。并且java在这方法提供的数据结构要远远比javascript丰富。

再来说选择结构,javascript的选择结构语法貌似与java相同,javascript的功能要更强大,貌似什么值都行。java只能是数值型的,用得反而少,java这点实现不太好。jdk5后有枚举改善了不少。因此,选择结构也不相通。

循环函数,没看懂,你要说的是循环控制语句,这两个倒是基本一样,差别是:

java编列数组(也包括list的实现类这么写的):

for(Object o : objArr)

{

System.out.println(o)

}

而javascript中类似的结构,是遍列对象用的:

for(var p in obj)

{

//如果obj是数组,p是数组的索引,obj[p]是数组的值

//如果obj是对象,p是对象的属性(有可能是对象域名称或方法名称,obj[p]是对象域值或对象方法)

console.log(p,obj[p])

}

现在的js框架中都会有foreach迭代,类似java迭代的用法,注意循环!如jquery中的each。

//这不是语言提供的功能,别人重新封装出来的。

$.each(arr,function(i,item){

console.log(item)

});

综上所属,java与javascript差别很大。包括楼主你想知道的问题,差别都很大。

希望我写这么多能帮到你。