一开始学到js正则表达式,当时以为应该和java的正则表达式会差不多,于是看一下,其实和java的正则表达式还是有点区别的。
首先我们要清楚什么是正则表达式?
正则表达式是一种用于匹配和操作文本的强大工具,它可以帮助你在字符串中查找、替换和提取特定的模式。它广泛应用于各种编程语言和文本处理工具中。
说简单点就是可以用来验证一些输入的内容是否符合你需要设计的规则
正则表达式由一系列字符和特殊字符组成,这些字符描述了要匹配的文本模式。例如,你可以使用正则表达式来查找所有包含特定字母组合的单词,验证电子邮件地址的格式,提取网页中的链接等等。
下面是一些常用的正则表达式特殊字符和它们的含义:
\d
:匹配任意数字字符。\w
:匹配任意字母、数字或下划线字符。\s
:匹配任意空白字符,如空格、制表符、换行符等。.
:匹配任意字符。*
:匹配前面的字符零次或多次。+
:匹配前面的字符一次或多次。?
:匹配前面的字符零次或一次。[]
:匹配括号内的任意字符。()
:分组,可以将多个字符看作一个整体进行匹配。
JavaScript和Java的正则表达式语法在某些方面有些不同,虽然它们都基于Perl的正则表达式语法,但存在一些细微的区别。
-
字面量表示法和字符串表示法:在JavaScript中,正则表达式可以使用字面量表示法,即使用斜杠(
/
)将正则表达式括起来,例如/pattern/
。而在Java中,正则表达式通常以字符串的形式表示,需要使用双引号括起来,例如"pattern"
。 -
修饰符:JavaScript中的正则表达式修饰符是在正则表达式字面量后面使用的标志,例如
/pattern/g
,其中g
表示全局匹配。而Java中的修饰符是作为参数传递给正则表达式相关方法的一部分,例如Pattern.compile("pattern",Pattern.CASE_INSENSITIVE)
,其中Pattern.CASE_INSENSITIVE
表示不区分大小写。
这里我们需要知道三种匹配模式:
i :匹配时忽略大小写;
g :全局匹配(如匹配一段输入的字符串中,如果匹配到了第一个则还要继续匹配下去)
m :多行匹配(使得匹配规则可以应用于每一行,而不仅仅是整个字符串。)
-
匹配方法和对象:在JavaScript中,正则表达式可以直接应用于字符串上的方法,如
match()
、search()
、replace()
等。而在Java中,正则表达式需要通过Pattern
和Matcher
对象来进行匹配和操作。 -
转义字符:JavaScript和Java对于正则表达式中的一些特殊字符的转义规则有些微差异。例如,匹配数字字符的元字符
\d
在JavaScript中可以写作/\d/
,而在Java中需要写作"\\d"
,因为在Java中反斜杠需要进行双重转义。
创建第一个正则表达式:
用于匹配电子邮件地址的基本格式:
const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
上述正则表达式可以用来验证电子邮件地址的格式是否合法。它的规则如下:
^
:匹配输入字符串的开头。[a-zA-Z0-9._-]+
:匹配一个或多个字母、数字、下划线、句点和短横线。@
:匹配电子邮件地址中的“@”符号。[a-zA-Z0-9.-]+
:匹配一个或多个字母、数字、句点和短横线,用于匹配域名部分。\.
:匹配电子邮件地址中的句点。[a-zA-Z]{2,}
:匹配两个或更多字母,用于匹配域名后缀(如com、net等)。$
:匹配输入字符串的结尾。
常见的正则表达式方法举例介绍
在 JavaScript 中,test()
方法是正则表达式对象的一个方法,用于测试一个字符串是否与正则表达式匹配。
test()
方法接受一个字符串作为参数,并返回一个布尔值,表示字符串是否与正则表达式匹配。如果匹配成功,返回 true
,否则返回 false
。
基本语法如下:
regex.test(str)
其中,regex
是一个正则表达式对象,而 str
是要进行匹配的字符串。
const regex = /hello/;
const str1 = 'hello world';
const str2 = 'goodbye world';
const match1 = regex.test(str1);
console.log(match1); // true
const match2 = regex.test(str2);
console.log(match2); // false
在上面的例子中,我们创建了一个正则表达式 /hello/
,表示匹配字符串中的 "hello"。然后我们使用 test()
方法分别对 str1
和 str2
进行匹配。
由于 str1
包含 "hello",所以 regex.test(str1)
返回 true
,而 str2
不包含 "hello",所以 regex.test(str2)
返回 false
。