wwwwwllllk 发表于 2022-10-25 11:45:31

正则表达式的使用

> 本帖最后由 wwwwwllllk 于 2022-10-25 11:53 编辑

昨天用到了,所以记录一下。
主要注意的点,new RegExp里面传入不是字符串,如果你传入的是字符串,就涉及到了转义了。(为什么会注意到这个点,因为系统采用的可配置的正则匹配,通过后天系统设置的正则匹配规则)

!(data/attachment/forum/202210/25/113656juxp7m1u2na5c6nl.png)

!(data/attachment/forum/202210/25/114157hgy15y661jkefzjv.png)

所以我们可以得出结论,字符串中只有\会出现问题,如果要写反斜杠要写两次\\,斜杠写一次就好了(只要我们涉及到\d,字符串中就要写成\\d,\w=>\\w)

然后就是exec的用法,这里也没有彻底搞懂,但是感觉其实也用不到,下面的案例可以参考,案例写法就可以。感觉test,match,replace就够用了。


```js

// var patt1=new RegExp('/+')
// console.log(patt1);
// let a = patt1.exec("%1212323//42434,.123%123")
// console.log(a);
// 最终搞出来了
var patt1=new RegExp('\\d+','g')
console.log(patt1);
let a = patt1.exec("%121232342434,.123%123")
console.log(a);



// 正则写法1
// var patt1=new RegExp(/\d+/g)
// console.log(patt1);
// let a = patt1.exec("%121232342434,.123%123")
// console.log(a);

// 正则写法2
// /\/d+\/g/
// /\d+/g
// var patt1=new RegExp('\\d+')
// console.log(patt1);
// let a = patt1.exec("%121232342434,.123%123")
// console.log(a);

// 正则写法3
// var patt1=new RegExp('\\d+','g')
// console.log(patt1);
// let a = patt1.exec("%121232342434,.123%123")
// console.log(a);

// 正则写法4
// var patt1= /\d+/g
// console.log(patt1);
// let a = patt1.exec("%121232342434,.123%123")
// console.log(a);


// 正则工具地址https://c.runoob.com/front-end/854/
// 正则中match的使用
// var pattern = /+/g
// var str = '123abc456def'
// console.log(str.match(pattern));

// exec注意事项,/g要加,while里面arr = pattern.exec(str)要加,否则就会造成死循环,相信我不会用exec了,因为没必要,match,replace一般的问题都可以解决
// var pattern = /+/g
// var str = '123abc456def'
// let arr = pattern.exec(str)
// while(arr != null){
//   console.log(arr);
//   arr = pattern.exec(str)
// }



// let str="web2.0 .net2.0";
// let pattern=/(\w+)(\d)\.(\d)/g;//有全局标志g
// let arr = pattern.exec(str);

// while(arr !== null) {
//   console.log(`匹配${arr}成功,该结果的起始位置在${pattern.lastIndex}`);
//   // 匹配web2.0成功,该结果的起始位置在6
//   // 匹配net2.0成功,该结果的起始位置在14
//   arr = pattern.exec(str);
// }
// console.log(arr);

```

```js

// 正则写法1
var patt1=new RegExp(/\d+/g)
console.log(patt1);
let a = patt1.exec("%121232342434,.123%123")
console.log(a);

// 正则写法2
// /\/d+\/g/
// /\d+/g
// var patt1=new RegExp('\\d+')
// console.log(patt1);
// let a = patt1.exec("%121232342434,.123%123")
// console.log(a);

// 正则写法3
// var patt1=new RegExp('\\d+','g')
// console.log(patt1);
// let a = patt1.exec("%121232342434,.123%123")
// console.log(a);

// 正则写法4
// var patt1= /\d+/g
// console.log(patt1);
// let a = patt1.exec("%121232342434,.123%123")
// console.log(a);


// 正则工具地址https://c.runoob.com/front-end/854/
// 正则中match的使用
// var pattern = /+/g
// var str = '123abc456def'
// console.log(str.match(pattern));

// exec注意事项,/g要加,while里面arr = pattern.exec(str)要加,否则就会造成死循环,相信我不会用exec了,因为没必要,match,replace一般的问题都可以解决
var pattern = /+/g
var str = '123abc456def'
let arr = pattern.exec(str)
while(arr != null){
console.log(arr);
arr = pattern.exec(str)
}



// let str="web2.0 .net2.0";
// let pattern=/(\w+)(\d)\.(\d)/g;//有全局标志g
// let arr = pattern.exec(str);

// while(arr !== null) {
//   console.log(`匹配${arr}成功,该结果的起始位置在${pattern.lastIndex}`);
//   // 匹配web2.0成功,该结果的起始位置在6
//   // 匹配net2.0成功,该结果的起始位置在14
//   arr = pattern.exec(str);
// }
// console.log(arr);```

脚本体验师001 发表于 2022-10-25 13:47:35

本帖最后由 脚本体验师001 于 2022-10-25 13:48 编辑

兄弟,你的所有烦恼都是源于规则是外族蛮夷制定的,完全和祖宗的中庸之道格格不入

这玩意让我设计应该是这样的:
找数字="123abc456".exec("数字找出来", "差不多就完事了")
console.log(找数字);

咦还真找出来了,不孬家伙!

shabby 发表于 2022-10-25 14:21:38

呃呃,说实话语言描述挺混乱的,没看懂到底文章想表达什么

可能是我太飞舞了看不懂大佬的文章?

文章中 `有问题` 的准确定义是什么?期望行为是什么?实际行为又是什么?

你在控制台输入 `patt1` 然后回车后输出 `/\d+\//` 是因为隐式调用了 `patt1.valueOf()` 会自动给字符串首尾加上 `/`

如果你不想要首尾的 `//` ,那用 `patt1.source` 就行

---

> 然后就是exec的用法,这里也没有彻底搞懂

呃呃,不能直接看mdn文档吗? (https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec)

或者标准文档也行 <https://tc39.es/ecma262/#sec-regexp.prototype.exec>

王一之 发表于 2022-10-25 15:57:10

哥哥发成悬赏贴了

这个网站挺不错的,在线测试正则 https://regex101.com/

王一之 发表于 2022-10-25 16:01:39

脚本体验师001 发表于 2022-10-25 13:47
兄弟,你的所有烦恼都是源于规则是外族蛮夷制定的,完全和祖宗的中庸之道格格不入

这玩意让我设计应该是这 ...

哥哥这都快成人工智能了

wwwwwllllk 发表于 2022-10-25 16:57:25

脚本体验师001 发表于 2022-10-25 13:47
兄弟,你的所有烦恼都是源于规则是外族蛮夷制定的,完全和祖宗的中庸之道格格不入

这玩意让我设计应该是这 ...

问题来源于还是对正则不熟,可能别的项目恰好用的正则写法和我常用的不一致。但是又想保持代码的风格一致。所以就会遇到一些问题。

wwwwwllllk 发表于 2022-10-25 16:58:52

王一之 发表于 2022-10-25 15:57
哥哥发成悬赏贴了

这个网站挺不错的,在线测试正则 https://regex101.com/

嘿嘿,悬赏贴交流也不错。本来自己就是想听下大佬们的思路
页: [1]
查看完整版本: 正则表达式的使用