正则表达式的使用
> 本帖最后由 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:48 编辑
兄弟,你的所有烦恼都是源于规则是外族蛮夷制定的,完全和祖宗的中庸之道格格不入
这玩意让我设计应该是这样的:
找数字="123abc456".exec("数字找出来", "差不多就完事了")
console.log(找数字);
咦还真找出来了,不孬家伙! 呃呃,说实话语言描述挺混乱的,没看懂到底文章想表达什么
可能是我太飞舞了看不懂大佬的文章?
文章中 `有问题` 的准确定义是什么?期望行为是什么?实际行为又是什么?
你在控制台输入 `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>
哥哥发成悬赏贴了
这个网站挺不错的,在线测试正则 https://regex101.com/
脚本体验师001 发表于 2022-10-25 13:47
兄弟,你的所有烦恼都是源于规则是外族蛮夷制定的,完全和祖宗的中庸之道格格不入
这玩意让我设计应该是这 ...
哥哥这都快成人工智能了 脚本体验师001 发表于 2022-10-25 13:47
兄弟,你的所有烦恼都是源于规则是外族蛮夷制定的,完全和祖宗的中庸之道格格不入
这玩意让我设计应该是这 ...
问题来源于还是对正则不熟,可能别的项目恰好用的正则写法和我常用的不一致。但是又想保持代码的风格一致。所以就会遇到一些问题。 王一之 发表于 2022-10-25 15:57
哥哥发成悬赏贴了
这个网站挺不错的,在线测试正则 https://regex101.com/
嘿嘿,悬赏贴交流也不错。本来自己就是想听下大佬们的思路
页:
[1]