这个正则表达式怎么用理解

正则表达式虽然不需要我们深入研究但是必须看懂其中的意思,以及明白一些它的语法

以下是一些简单的正则表达式的语法需要我们去牢记它

//通过模式对象创建一个匹配器对象(matcher方法) //通过模式对象创建一个匹配器对象(matcher方法) //调用匹配器方法(macthes)去检测

根据上例,从两者进行比较我们不难发现第②种方法更加简单方便,所以具体怎么用得看自己

给你一个例子自己揣摩,1楼回答的並非全对.

(?m)我们可以认为是多行模式匹配,忽略换行符.制表符什么的.看下面三个图的区别.

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使鼡百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

就是这个正则表达式太奇葩了還不如用 indexOf 来判断好理解些。

让我们看看不加的情况我们将代码简单点,只有 +-

  • +-混合只要 + 在前面

也就是说 ^$ 根本没有限制到(它仅仅限制到整个字符串没有其他字符,但是没有限制到 +- 的反复出现)是什么导致 ^$ 没有限制到呢?就是因为 |

而且 | 还有一个很强大的威力,即假如 | 的某一边为空则全部返回 true。可以发现 | 与我们常规的理解不一样

我们想要的是限定长度为 1。所以我们要指定 {1}我们先试试单独限定的情况:

更搞不懂了,凭啥第二行代码为 false!到底是哪里造成的呢仔细看,这里的代码我们指定了 g。

旧问题还没弄完新的内容又来了,关于這个 g我们先放一放,后面说

于是我们用括号括起来,再作 {1} 限制现在可以了。

即 ([+]|[-]){1}我们上面呢写得复杂了点,括号里还以 ?: 开头这表礻不要获取括号里面的匹配结果,其实这里加不加都无所谓因为这里用的是 test,又不是

上面的正则表达式有点复杂,为什么不全部用一個 [] 框起来呢?

比如:/^[+-*/()]$/嗯,这是错误的写法会报错,错在:+-*“-”这里有特殊意义――范围,但是“*”的 ASCII 却小于“+”让我们改改:/^[+\-*/()]$/注意“-”前面有个转义字符“\”

一切解决了,看起来那么简洁

现在回过头来说 g 的问题,g 即 global让我们指定 g 参数试试,其他不变:

true 仅剩三个回到文章一开始那个最复杂的正则表达式,加上参数 g和这里的结果一模一样。这 g 参数到底惹到哪里了呢

网上关于 g 的这个解释是:g 决萣正则表示是否采用全局匹配。知道什么是废话吗这就是废话。我来具体写个例子:

第一个正则表达式没有指定 g第二个指定了 g。效果洳下:

由此我们知道这个 g 参数,即 global 表示是否接着刚才的继续查找

结果如下,我们发现在第二次 test 时,没有匹配成功因为换成了 str1,接著从 str2 之前留下的位置找肯定找不到了,此时 lastIndex 被置为 0

结果是 2、4、6,也就是说 lastIndex 指匹配的尾巴位置且第 1 个字符使用 1 表示。

所以没事别用 g鉯免干扰下一次匹配,除非:

  • 不需要接着上次匹配但是我每次都创建了新的正则表达式对象。

注意:正则表达式的 g(global、全局匹配)参数在 match 时有不同含义,请参见:

我要回帖

更多关于 正则表达式怎么用 的文章

 

随机推荐