正则表达式匹配中文汉字(正则)
正则表达式匹配中文汉字,正则很多人还不知道,乐儿来为大家解答以上问题,现在让我们一起来看看吧!
Js正则表达式中有许多特殊字符。有些人可能不知道他们的意思。下面详细介绍一下。
Js正则表达式的特殊字符
Js正则表达字符含义
\作为转移意义,通常跟在' \ '后面的字符不按其本义解释,如/b/匹配字符' b '。当在b前面加一个斜线时,/\b/被转移以匹配一个单词的边界。
-或者-
正则表达式的功能字符的恢复,如' * '匹配其前面的元字符0次或更多次,/a*/将匹配a,aa,aaa,添加' \ '后,/a\*/将只匹配' a* '。
匹配输入或行首,/A/匹配“A”而不是“A”
$匹配输入或行尾,/a$/匹配“A ”,但不匹配“A”
*匹配前面的元字符0次或更多次,/ba*/将匹配b,ba,baa,baaa。
匹配第一个元字符一次或多次,/ba*/将匹配ba,baa,baaa。
?匹配第一个元字符0或1次,/ba*/将匹配b,ba。
(X)匹配X并将X保存在名为$1的变量中.$9
X|y匹配x或y
{n}精确匹配n次
{n,}匹配超过n次。
{n,m}匹配n-m次
[xyz]字符集,它匹配该集中的任何字符(或元字符)。
[XYZ]与该集合中的任何字符都不匹配。
[\b]匹配一个退格字符。
\b匹配单词的边界。
\B匹配单词的非边界。
\cX这里,X是控制字符,/\cM/匹配Ctrl-M。
\d匹配一个单词数字字符,/\d/=/[0-9]/
\D匹配一个非单词字符,/\ d/=/[0-9]/
\n匹配一个换行符。
\r匹配回车。
\s匹配一个空白字符,包括\n,\r,\f,\t,\v等。
\S匹配一个非空白字符,该字符等于/[\ n \ f \ r \ t \ v]/
\ t匹配选项卡。
\v匹配一个直制表符。
\w匹配一个可以组成单词的字符(字母数字,这是我的意译,包括数字),包括下划线,比如[\w]匹配' $5.98 '中的5,等于[a-zA-Z0-9]
\W匹配不能构成单词的字符,如[\W]匹配' $5.98 '中的$等于[a-za-z0-9]。
Re=new regexp ('pattern ',['flags'])更好。
模式正则表达式
Flags: g(在全文中查找所有模式)
I(忽略大小写)
多行搜索
VaScript Dynamics正则表达式问题
请问正则表达式可以动态生成吗?
例如,在JavaScript中:
var str=' strTemp
生成:
var re=/strTemp/;
如果是字符连接:
Var='/'str'/'
但是要生成一个表达式,能实现吗?如何实现?
正则表达式是描述字符模式的对象。
JavaScript的RegExp对象和String对象定义了使用正则表达式执行强大的模式匹配和文本检索替换功能的方法。
在JavaScript中,正则表达式由一个RegExp对象表示。当然,RegExp()构造函数可以用来创建RegExp对象,
还可以使用JavaScript 1.2中新添加的特殊语法创建RegExp对象。正如字符串被定义为用引号括起来的字符一样,
正则表达式直接数量也被定义为包含在一对斜杠(/)之间的字符。因此,JavaScript可能包含以下代码:
var模式=/s $/;
这行代码创建了一个新的RegExp对象,并将其赋给变量parttern。这个特殊的RegExp对象匹配所有以字母“s”结尾的字符串。它也可以用RegExp()来定义
具有以下代码的等效表达式正则:
var pattern=new RegExp(' s $ ');
创建RegExp对象很容易,无论是使用正则表达式直接数量还是使用构造函数RegExp()。更困难的任务是使用正则表达式语法来描述字符的模式。
JavaScript使用Perl语言正则,这是一个相当完整的表达式语法子集。
正则表达式的模式规范由一系列字符组成。大多数字符(包括所有字母数字字符)描述字面匹配的字符。这样正则表达式/java/匹配所有包含子字符串' java '的字符串。虽然正则表达式中的其他字符在字面上不匹配,但它们都有特殊的含义。正则表达式/s$/包含两个字符。第一个特殊字符“s”与它本身完全匹配。第二个字符' $ '是匹配字符串结尾的特殊字符。所以正则表达式/s$/与字母匹配
1.直接测量字符
我们发现正则表达式中的所有字母字符和数字在字面上与它们自己匹配。JavaScript的正则表达式还通过以反斜杠(\)开头的转义序列支持一些非字母字符。例如,序列' \n '匹配字符串中的直接换行符。在010-
正则表达式的直接字符
字符匹配
字母数字字符本身
\ f分页符
\ n换行符
\ r输入
\ t标签
\ v垂直制表符
\/一个/直接数量
\ \一\直接数量
\.一个。直接数量
\ *一*直接数量
\直接数量
\ ?一个?直接数量
\ |一|直接数量
\(一(直接数量
\)一)直接数量
\[a[直接数量
\] a]直接数量
\ {一个{直接数量
\}一}直接数量
\ XXX由十进制数XXX指定的ASCII码字符。
\ Xnn由十六进制数nn指定的ASCII字符
\ cX控制字符x,例如,\cI相当于\t,\cJ相当于\n
如果要在正则表达式中使用特殊的标点符号,必须在它们前面加一个“\”。
2.字符类
可以通过将单个直接字符放在括号中来组合一个字符类。字符类匹配它包含的任何字符,所以正则 expression/[ABC]/匹配字母' a ',' b '和' c '中的任何一个。此外,可以定义负字符类。这些类匹配除括号中的字符之外的所有字符。定义负字符提示时,使用符号作为左括号中的第一个字符。正则表达式集是/[a-zA-z0-9]/。
因为有些字符类是非常常用的,JavaScript的正则表达式语法包含了一些特殊的字符和转义序列来表示这些常用的类。例如,\s匹配空格字符、制表符和其他空白字符,而\s匹配除空白字符以外的任何字符。
正则灰色字符类别
字符匹配
[.]括号中的任何字符
[.]不在括号中的任何字符
换行符以外的任何字符,相当于[\ n]
\w任何单字字符,相当于[a-zA-Z0-9]
\W任何非单个字符,相当于[A-ZA-Z0-9]
\s任何空白,相当于[\ t \ n \ r \ f \ v]
\S任何非空白字符,相当于[\ t \ n \ r \ f \ v]
\d任何数字,相当于[0-9]
\D除数字以外的任何字符,相当于[0-9]
[\b]退格直接数量(特殊情况)
复制
用上面的正则表语法,两位可以描述为/\ d \ d/,四位可以描述为/\ d \ d \ d/。然而,我们仍然没有办法用任何多数或字符串来描述一个数。该字符串由字母后面的三个字符和一个数字组成。这些复杂的图案
指定的字符总是出现在它们所用于的模式之后。由于一些类型的抄写是相当常用的,一些特殊的字符被用来表达它们。例如,“符号”匹配一次或多次复制先前模式的模式。下表列出了复制语法。首先,看一个例子:
/\ d {2,4 }//匹配介于2和4之间的数字。
/\w{3} \d?///匹配三个单字字符和一个任意数字。
/\ s java \ s//匹配字符串“Java ”,字符串前后可以有一个或多个空格。
/[']*//匹配零个或多个非引号字符。
正则复制表达式字符
字符含义
{n,m}匹配前一项至少n次,但不超过m次
{n,}与前一项匹配n次或多次。
{n}与前一项精确匹配n次
?匹配前一项0或1次,这意味着前一项是可选的。它相当于{0,1}
匹配前一项一次或多次,相当于{1,}
*与前一项匹配0次或更多次。相当于{0,}
4.选择、分组和报价
正则表达式的语法还包括指定选项、分组子表达式以及引用前一个子表达式的特殊字符。字符|用于分隔选择的字符。例如:/ab|cd|ef/匹配字符串“ab”,或字符串“cd”,或“ef”。/\ d {3} | [A-四个小写字母之一。括号在正则表达式中有几个作用。它的主要功能是将单个项目分组到子表达式中,以便您可以使用*,或?来处理这些项目。比如:/java(脚本)?/匹配字符串“java”,该字符串后面可以跟“script ”,也可以不跟。/
(ab | cd)| ef)/匹配可以是字符串“ef”,也可以是字符串“ab”或“CD”的一次或多次重复。
在正则表达式中,括号的第二个用途是在完整的模式中定义子模式。当正则表达式成功匹配目标字符串时,可以从目标字符串中提取与括号中的子模式匹配的部分。例如,假设我们要搜索的模式是一个或多个字母后跟一个或多个数字,那么我们可以使用模式/[a-z] \ d/。但是由于我们真的关心每个匹配结束时的数字,那么如果我们把模式的数字部分放在括号中(/[a-z] (\d )/),我们就可以从检索到的任何匹配中提取数字,然后我们将分析它们。
括号的子表达式的另一个目的是允许我们在同一个正则表达式之后引用前一个子表达式。这是通过在字符串后添加一个或多个数字来实现的。数字指的是正则表达式中括号子表达式的位置。例如:\1引用第一个括号的子表达式。\3是指
所以它的位置就是被计数的左括号的位置。
例如:在下面正则表达式被指定为\2:
/([Jj]ava([Ss]script))\ sis \ s(fun \ w *)/
正则表达式中对前一个子表达式的引用并未指定该子表达式的模式,而是指定了与该模式匹配的文本。这样,引用不仅可以快速帮助您输入正则表达式的重复部分
它还实现了一个约定,即一个字符串的所有分隔部分都包含完全相同的字符。例如,以下表达式正则匹配单引号或双引号内的所有字符。但是,它要求开始和结束引号匹配(例如,都是双引号或都是单引号):
/[' '] [^ ' ']*[' ']/
如果要求开头和结尾的引号匹配,我们可以使用下面的引号:
/( [' '] ) [^ ' '] * \1/
\1匹配第一个括号的子表达式匹配的模式。在本例中,它实现了一个约定,即开始引号必须与结束引号匹配。注意,如果反斜杠后面的数字大于括号的子表达式,它将被解析为十进制转义序列,而不是引用。可以坚持用完整的三个字符来表示转义序列,这样可以避免混淆.
字符含义
|选择。符号左侧的子表达式或符号右侧的子表达式匹配。
(.)分组。把几个项目分成一个单元。这个单元可以由*、和|,并且还可以记住与该组匹配的字符,以供以后参考。
使用
\n匹配第n个分组匹配的字符。分组是括号中的子表达式(可能是嵌套的)。分组号是从左到右计算的左括号数
5.指定匹配位置。
正如我们所看到的,a正则表达式中的许多元素可以匹配字符串中的一个字符。例如:\s只匹配一个空白字符。其他正则表达式的元素匹配字符之间宽度为0的空格,而不是实际的字符。例如:\b匹配单词的边界,即a /w字符和a W之间非单词字符之间的边界。像\b这样的字符不指定匹配字符串中的任何字符,它们指定匹配发生的合法位置。有时我们称这些元素为正则表达式的锚,因为它们将模式定位在搜索字符串中的特定位置。最常用的锚元素是,它使模式依赖于字符串的开头,而锚元素$在字符串中定位模式。
比如:要匹配‘JavaScript’这个词,我们可以用正则 expression/JavaScript $/。如果我们想要检索单词“java”本身(而不是像“javascript”中那样作为前缀),那么我们可以使用/\s java \s/,它要求单词java前后都有空格。但是有两个问题。首先,如果“java”出现在一个字符的开头或结尾,模式将不会匹配它,除非在开头和结尾有一个空格。第二,当模式找到一个匹配的字符时,它返回的匹配字符串前后两端都有空格,这不是我们想要的。因此,我们使用边界这个词。
以下是正则表达式的定位字符:
字符含义
匹配字符的开头,在多行检索中,匹配行的开头。
$匹配字符的结尾。在多行检索中,它匹配行尾。
\b匹配单词的边界。简而言之,它位于字符\w和\w之间(注意:[\b]匹配退格字符)
\B匹配不是单词边界的字符。
6.属性
语法中有最后一个元素正则表达式,也就是正则表达式的属性,解释了高级模式匹配的规则。与其他正则表达式语法不同,该属性在/符号之外解释。也就是说,它们不出现在两个斜杠之间,而是位于第二个斜杠之后。javascript 1.2支持两种属性。
也就是说,应该找到检索到的字符串中的所有匹配。这两个属性的组合可以执行不区分大小写的全局匹配。
例如,执行不区分大小的搜索来查找单词“java”(或“java”、“JAVA”等)的第一个具体值。),我们可以使用不区分大小的正则表达式/\ b java \ b/i .如果我们想在一个字符串中找到' java '的所有具体值,我们还可以添加属性g。
以下是正则表达式的属性:
字符含义
我执行不区分大小写的匹配。
g执行全局匹配,简而言之就是找到所有匹配,而不是找到第一个就停下来。
除了属性g和I,正则表达式没有类似属性的其他属性。如果构造函数RegExp的静态属性multiline设置为true,则模式匹配将以多行模式执行。在这种模式下,定位字符$和$不仅匹配检索字符串的开头和结尾,还匹配检索字符串中一行的开头和结尾。
今天的分享,希望对大家有所帮助。