js333 > 计算机互联网 > 字符组的使用,匹配文本首和尾

原标题:字符组的使用,匹配文本首和尾

浏览次数:131 时间:2019-11-19

我们再次考虑 000-999 的匹配:“d{3}”,尽管它没有错,但它只能匹配精确地匹配 3 位:000、001、002 … 100、101 … 999。而通常,我们需要对于 0、10、99 这样的数也能够匹配,这时,就需要指定可以匹配 1 到 3 位的数字。

正则表达式的三部曲应该是:1、查找;2、引用匹配了的文本(后向引用);3、有选择地替换文本。

有的时候,我们不想让“.”去匹配任何的字符,仅仅想让它匹配“.”这一单个字符,也就是仅匹配它本身,此时,可以使用“.”来对它进行转义。

有的时候,我们想要匹配的字符串必须位于全部文本的首位,比如说 XML 文件的声明“<?xml version="1.0" encoding="UTF-8" ?>”;有的时候,需要匹配的字符串位于全部文本的末尾,比如</html>。对于这种匹配,上面介绍的单词边界匹配就无能为力了。

正则表达式中,使用“{最小数目,最大数目}”的语法来实现,它的使用方式与上一节介绍的匹配固定数目字符的语法相同。

需要注意的是:大部分语言的正则表达式实现,在查找中,使用后向引用来代表一个子模式,其语法是“数字”;而在替换中,其语法是“$数字”。

比如使用正则 w. 可以匹配到 www.bkjia.com 中的 w. 字符。

匹配文本首

在正则表达式中,可以在 匹配模式 的第一个字符前添加 “^”,以匹配 满足模式且位于全部文本之首的字符串。可以将它的匹配方式理解成这样:

  1. 假设不存在“^”,进行一个正常匹配,将所有匹配的文本保存到匹配集合中;
  2. 在匹配集合中寻找位于 所搜索的文本 首位的匹配;
  3. 从匹配集合中删除其他匹配,仅保留该匹配。

正则如下:

^(s*bkjiad?.net)
[0-9]{1,3}

替换电话号码格式

我们的电话格式通常都是:(区号)电话,比如说:(0756)8401132;现在假设我们要求把文本中所有的电话格式都改为:0756-8401132,我们可以这样做:

((d{4}))(d{8})

如果要匹配“”,可以使用“”来对它进行转义。后面还会介绍更多需要转义的字符。

效果演示

bkjia.com and bkjia2.net are websites.

效果演示

100

001

1xxx

1001

1c

效果演示

(0756)82514769 
(0756)83281314 
(0756)88401132 

“.”过于灵活了,它可以匹配几乎所有的单个字符。有的时候,我们只希望匹配有限个字符中的某一个。这个时候,可以使用字符组。

本例代码

function reg_replace()
{
 var test = document.getElementById("test");
 var regex = /^(s*bkjiad?.net)/g;
 test.innerHTML = test.innerHTML.replace(regex,"$1");
}

我们进行文本边界匹配时,通常还需要添加对空字符的处理所以需要在字符串前加上s*

按照之前说的,它的匹配过程是这样:

  1. 假设匹配模式是 bkjiad?.net,对文本进行匹配。
  2. 一共找到 2 个符合模式的文本:第一行 和 第二行的 bkjia.com, 及 bkjia2.net
  3. 从所有匹配的文本中筛选出位于文本首位的匹配文本:即第一行的 bkjia.com,删除所有其他匹配。

本例代码

function reg_replace()
{
 var test = document.getElementById("test");
 aim = "1[35][0-9]{9}";
 var regex = new RegExp("("+aim+")","g");
 test.innerHTML = test.innerHTML.replace(regex,"$1");
}

我们发现了两个问题:1、我们不希望 “1234” 被匹配,然而,它被分成两部分“123”和“4”进行了匹配,如何不让它被匹配;2、为什么要被分成 123 和 4,而不是 1 和 234?我们留待后面讨论。

注意两个特例:

  • 最小数目可以是 0,所以 “{0,1}”,相当于 “?”。
  • 如果不限制最大数目,可以将最大数目设为空,所以“d{1,}”相当于“+”;而“{0,}”相当于“*”。

“{”和“}”也是元字符,当我们需要对它们进行匹配的时候,使用“”进行转义:“{”和“}”。

本例代码

function reg_replace()
{
 var test = document.getElementById("test");
 var regex = /((d{4}))(d{8})/g;
 test.innerHTML = test.innerHTML.replace(regex,"$1-$2");
}

如果这篇文章你是从头看到这里,相信这个表达式对你来说没有任何难度,需要留意的是这里对元字符“(”和“)”进行了转义,并且,在替换结果中,我们要求它不出现。

假设有这样一种情况,我们希望验证某个单词是不是拼写正确,比如说 “head” 是一个单词,“heat”也是一个单词,但“heay”就不是一个单词,所以,“hea”后面要么出现“d”,要么“t”,而如果我们使用“.”来进行匹配,那么不管是“heay”也好,“heas”也罢,都会被匹配(被认为是正确的单词)。

匹配文本末

有匹配文本首的语法,自然有匹配文本末的语法。

在正则表达式中,可以在 匹配模式 的最后一个字符后添加 “$”,以匹配 满足模式且位于全部文本之末的字符串。

它的匹配方式 与 匹配文本首“^”相似,这里就不再详细说明了,只给出一个例子:

正则如下:

(bkjiad?.nets*)$

延伸阅读

此文章所在专题列表如下:

  1. 什么是正则表达式?
  2. 正则入门:匹配固定的单个字符
  3. 正则入门:匹配任意的单个字符
  4. 金沙js333娱乐场,正则入门:字符组的使用
  5. 正则入门:在字符组中使用字符区间
  6. 正则入门:反义字符组的使用
  7. 正则入门:匹配空字符
  8. 正则入门:匹配一个或多个字符
  9. 正则入门:匹配零个或多个字符
  10. 正则入门:匹配零个或一个字符串
  11. 正则入门:匹配固定数目的字符
  12. 正则入门:匹配区间内数目的字符
  13. 正则入门:贪婪匹配
  14. 正则入门:惰性匹配
  15. 正则入门:两个匹配模式
  16. 正则入门:匹配单词边界
  17. 正则入门:边界的定义与相对性
  18. 正则入门:匹配非单词边界
  19. 正则入门:匹配文本首和尾
  20. 正则入门:子模式
  21. 正则入门:“或”匹配
  22. 正则入门:后向引用文本替换
  23. 正则入门:非获取匹配
  24. 正则总结:JavaScript中的正则表达式
  25. 正则总结:正则表达式在js中的高级应用

000-999 的匹配:“d{3}”,尽管它没有错,但它只能匹配精确地匹配 3 位:000、001、002 … 100、101 … 999。而通常,我们需要对...

延伸阅读

此文章所在专题列表如下:

  1. 什么是正则表达式?
  2. 正则入门:匹配固定的单个字符
  3. 正则入门:匹配任意的单个字符
  4. 正则入门:字符组的使用
  5. 正则入门:在字符组中使用字符区间
  6. 正则入门:反义字符组的使用
  7. 正则入门:匹配空字符
  8. 正则入门:匹配一个或多个字符
  9. 正则入门:匹配零个或多个字符
  10. 正则入门:匹配零个或一个字符串
  11. 正则入门:匹配固定数目的字符
  12. 正则入门:匹配区间内数目的字符
  13. 正则入门:贪婪匹配
  14. 正则入门:惰性匹配
  15. 正则入门:两个匹配模式
  16. 正则入门:匹配单词边界
  17. 正则入门:边界的定义与相对性
  18. 正则入门:匹配非单词边界
  19. 正则入门:匹配文本首和尾
  20. 正则入门:子模式
  21. 正则入门:“或”匹配
  22. 正则入门:后向引用文本替换
  23. 正则入门:非获取匹配
  24. 正则总结:JavaScript中的正则表达式
  25. 正则总结:正则表达式在js中的高级应用

需要注意的是:大部分语言的正则表达式...

正则表达式提供 字符组 来解决这一问题,对于上例,“hea”后面仅可以匹配“d”或者“t”的情况,它的语法是 “[dt]”。中括号是特殊标记,用以划定属于组内的字符的界限,它所代表的含义是:“匹配 d 或者 t”。

效果演示

bkjia.com and bkjia2.net are both names bkjia.com

回顾下之前介绍的,可以看出:“b”和“B”是对 匹配模式(表达式) 中某个字符出现的进行位置(单词首位还是末位)进行限制。“^”和“$” 是对 整个待搜索文本 的 匹配模式(表达式) 出现位置(文本首位还是文本末位)进行限制。它们的关系是一小一大。

效果演示

正则如下:

.ea[dt]

www.bkjia.com is heat

www.google.com is head of internet

www.abc.org is heart

www.bkjia.com is heat

www.google.com is head of internet

www.abc.org is heart

延伸阅读

此文章所在专题列表如下:

  1. 什么是正则表达式?
  2. 正则入门:匹配固定的单个字符
  3. 正则入门:匹配任意的单个字符
  4. 正则入门:字符组的使用
  5. 正则入门:在字符组中使用字符区间
  6. 正则入门:反义字符组的使用
  7. 正则入门:匹配空字符
  8. 正则入门:匹配一个或多个字符
  9. 正则入门:匹配零个或多个字符
  10. 正则入门:匹配零个或一个字符串
  11. 正则入门:匹配固定数目的字符
  12. 正则入门:匹配区间内数目的字符
  13. 正则入门:贪婪匹配
  14. 正则入门:惰性匹配
  15. 正则入门:两个匹配模式
  16. 正则入门:匹配单词边界
  17. 正则入门:边界的定义与相对性
  18. 正则入门:匹配非单词边界
  19. 正则入门:匹配文本首和尾
  20. 正则入门:子模式
  21. 正则入门:“或”匹配
  22. 正则入门:后向引用文本替换
  23. 正则入门:非获取匹配
  24. 正则总结:JavaScript中的正则表达式
  25. 正则总结:正则表达式在js中的高级应用

XML 文件的声明“?xml version="1.0" encoding="UTF-8" ?>”;有的时候,需要匹配...

本例代码

<script type="text/javascript">
function reg_replace()
{
 var test = document.getElementById("test");
 regex = new RegExp(".ea[dt]","g");
 test.innerHTML = test.innerHTML.replace(regex,"heax");
}

function reg_split()
{ 
 var test = document.getElementById("split");
 regex = new RegExp(".ea[dt]","g");
 test.innerHTML = test.innerHTML.split(regex);
}
</script>

字符组 虽然由多个字符构成,但它仍只匹配 单个 字符,而字符组能够匹配的单个字符,即是它定义中的字符(“[]”内的字符)。“[]”本身不进行字符匹配,它仅仅划定字符组边界。

延伸阅读

此文章所在专题列表如下:

  1. 什么是正则表达式?
  2. 正则入门:匹配固定的单个字符
  3. 正则入门:匹配任意的单个字符
  4. 正则入门:字符组的使用
  5. 正则入门:在字符组中使用字符区间
  6. 正则入门:反义字符组的使用
  7. 正则入门:匹配空字符
  8. 正则入门:匹配一个或多个字符
  9. 正则入门:匹配零个或多个字符
  10. 正则入门:匹配零个或一个字符串
  11. 正则入门:匹配固定数目的字符
  12. 正则入门:匹配区间内数目的字符
  13. 正则入门:贪婪匹配
  14. 正则入门:惰性匹配
  15. 正则入门:两个匹配模式
  16. 正则入门:匹配单词边界
  17. 正则入门:边界的定义与相对性
  18. 正则入门:匹配非单词边界
  19. 正则入门:匹配文本首和尾
  20. 正则入门:子模式
  21. 正则入门:“或”匹配
  22. 正则入门:后向引用文本替换
  23. 正则入门:非获取匹配
  24. 正则总结:JavaScript中的正则表达式
  25. 正则总结:正则表达式在js中的高级应用

...

本文由js333发布于计算机互联网,转载请注明出处:字符组的使用,匹配文本首和尾

关键词:

上一篇:HTML5通用接口详解,IOS开发中关于HTML5通用接口介

下一篇:HTML5不支持标签和新增标签