JavaScript java 正则表达式

在正则表达式中,有些符号有特殊意义(除了引号和@),故要使用符号直接量,必须加转移字符-反斜杠,即用\! 表示!号,如果记不住全部,可以在所以符号前加上\。不过某些字母加反斜杠后表示其它字符,如\t表示制表符,所以字母不要随便加反斜杠。

[a-zA-Z0-9]{6,8}貌似后面的不取作用,不过可以用xx.length来代替

修改 是因为test()不会全局索引的原因   在Java中可用

几个常用的正则表达式的方法

js:

1: .match() 返回值是一个数组,其中下表为零表示匹配文本,其余则表示子匹配文本(需加小括号)(在全局检索下,表示其它匹配项)

如果正则表示式中有g标记(标记i表示不区分大小写)则会全局检索,否则则会部分检索。

例子

“1 plus 2 =3”.match(/[0-9]+/g);返回结果为[“1”,”2”,”3”]

2: .search() 返回第一个匹配字符的位置,如果没有则返回-1,不能执行全局检索,姑会忽略g标志。

例子

“JavaScript”.search(/script/i); 返回结果为4

3:.split(delimiter,limit)返回一个字符串数组(join()是合并)。

“.3”.split(“.”)返回[“1”,”2”,”2”,”3”]

“1 2,3 4”.split(/[\s\,]/)返回[“1”,”2”,”2”,”3”]

4:.replace()

“javascript”.replace(/javascript/gi,”javaScript”) 前面是匹配,后面是替换的字符串

//所谓引用就是用引号加任意多个非引号字符,然后加括号构成的

var quote=/”([^”])*”/g;

//用大引号替换直接引号,并且用保留引号内容不变

text.replace(quote,”’$1‘”);

扩展,调换顺序

var s=/([a-zA-Z]+)\s+([a-zA-Z]+)/g;

document.write("i am".replace(s,"$2,$1"));

5: .exec() 注 pattern.exec(String) 是RegExp的方法

与match()不同的是全局检索时,返回的是一个储存相信的数组。(不是全局时一样)有个lastIndex属性标记最后一个匹配字符的位置(其他字符串方法会自动设为0),

//不是全局是与match() 只是调换了方法的顺序。

var pattern=/(ja)(va)/;

var test="java is java";

var array=pattern.exec(test);

document.write(array[0]+array[1]);

//全局时可以用lastIndex 属性

var pattern=/java/g;

var test="java is java";

var array=pattern.exec(test);//返回的是一个字符串

document.write(array+array.index+pattern.lastIndex);//可用index和lastIndex标记位置

//test()简单 返回的是ture和null 故可用一个Boolean型定义返回的结果

var s=pattern.test(test);

延伸java中的正则表达式

import="java.util.regex.*"

//最基本

Pattern p = Pattern.compile("a*b");

Matcher m = p.matcher("aaaaab");

boolean b = m.matches();

//Pattern.compile(regex,flag)

regex - 要编译的表达式。

flags - 匹配标志

可以组合多个flag

如 Pattern p = Pattern.compile("^java",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);

CASE_INSENSITIVE:忽略大小写 (?i)

忽略大小写

(?i)abc 表示abc都忽略大小写

a(?i)bc 表示bc忽略大小写

a((?i)b)c 表示只有b忽略大小写

也可以用Pattern.compile(rexp,Pattern.CASE_INSENSITIVE)表示整体都忽略大小写

MULTILINE: 启用多行模式 (?m)

Pattern p = Pattern.compile("java",

Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);

Matcher m = p.matcher(

"java has regex Java has regex\n" +

"JAVA has pretty good regular expressions\n" +

"Regular expressions are in Java");

while(m.find())

out.println(m.group());

//结果为java Java JAVA java

其他见api

static int        CANON_EQ启用规范等价。

static int        CASE_INSENSITIVE启用不区分大小写的匹配。

static int        COMMENTS模式中允许空白和注释。

static int        DOTALL启用 dotall 模式。

static int        LITERAL启用模式的字面值分析。

static int        MULTILINE启用多行模式。

static int        UNICODE_CASE启用 Unicode 感知的大小写折叠。

static int        UNIX_LINES启用 Unix 行模式。

//pattern.split(String,limit)

//limit 控制数组的长度,如果为负数和零无限制,不过零会抛弃后面的空字符串,返回数组

Pattern p4=Pattern.compile("[,\\s]");//需要注意的是\\s

String s="i, guo";

String k[]=p4.split(s);

for(int i=0;i<k.length;i++)

{out.println(k[i]);}

//Matcher.find()

//limit 控制数组的长度,如果为负数和零无限制,不过零会抛弃后面的空字符串,返回数组

Pattern p4=Pattern.compile("[a-z]+",Pattern.CASE_INSENSITIVE);

String s="i,Kankan guo";

Matcher m = p4.matcher(s);

while(m.find()){out.println(m.group());}//这里可以添加到一个数组或向量

//Matcher.group()上面的例子

//group(0)=group() group(1)等同于js中的$1

//故java中调换顺序可以这么写

Pattern p4=Pattern.compile("(ja)(va)", Pattern.CASE_INSENSITIVE);

String s="java";

Matcher m = p4.matcher(s);

if(m.find())

{

s=m.group(2)+m.group(1);

out.print(s+m.start()+m.end());//start()和end()的用法

}

或者
Pattern p4=Pattern.compile("(ja)(va)", Pattern.CASE_INSENSITIVE);
String s="java JAVA";
Matcher m = p4.matcher(s);
s=m.replaceAll("$2$1");
out.print(s);//start()和end的用法

//Matcher.replaceAll(string) .replaceFirst(string);

即用string 替换匹配的字符串 all表示全部 first表示第一个

//用replaceAll去除html标签

Pattern p=Pattern.compile("<(/)*[(=?:._\")(\\s\\u4e00-\\u9fa5)(/{1,2}[\\w\\u4e00-\\u9fa5])]+(/)*>");

String s="<a href=\"/question/15344479.html?fr=idrm\" target=\"_blank\">汽车排量后跟的MT、AT是什么意思?</a>&nbsp;[<a href=\"/browse/155?fr=idrm\" class=\"lgy\">购车养车</a>]<br>";

Matcher m = p.matcher(s);

s=m.replaceAll("");

out.print(s);

//结果为:汽车排量后跟的MT、AT是什么意思? [购车养车]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值