正则表达式(Regular Expression)

正则表达式(Regular Expression)是一种强大的文本处理工具,用于快速高效地执行复杂字符串操作,如搜索、替换、分割等。它使用一种特殊语法来描述需要匹配的字符序列或模式,从而在文本中定位和处理这些特定模式。

用途: 

  1. 字符串搜索:在文本中寻找符合给定模式的字符串。
  2. 字符串提取:从文本中提取符合给定模式的字符串。
  3. 字符串替换:用新字符串替换文本中符合给定模式的部分。
  4. 字符串分割:按照给定模式将字符串拆分成多个部分。
  5. 输入验证:检查用户输入的数据是否符合预设的格式要求。

正则表达式具有高度灵活性和可扩展性,可以根据实际需求组合出各种复杂的模式来处理字符串。许多编程语言和应用程序都支持正则表达式,包括 Java、Python、JavaScript、Perlundefinedundefined 等 

正则表达式元素及其作用:

  1. 字符类别:表示一组特定的字符。例如 \d 表示数字(0-9),\w 表示字母、数字和下划线,\s 表示空白字符(空格、制表符、换行符等)。

  2. 量词:用于控制某个字符或字符类别的重复次数。例如 {n}表示精确匹配 n 次,{n,}表示至少匹配 n 次,{n,m}表示至少匹配 n 次,最多匹配 m 次。

  3. 锚点:用于指定字符串开头或结尾的位置。例如 ^表示字符串的开头,$表示字符串的结尾。

  4. 括号:用于创建捕获组。括号内的内容将作为一个整体参与匹配,并可以在其他地方引用。例如 (foo)可以匹配 foo,并将其作为组 1 引用。

  5. 否定前瞻断言 和 肯定前瞻断言:用于分别排除或确认匹配项之后的内容。例如 (?=foo)只匹配那些后面跟着 foo 的字符串,(?!foo)则只匹配那些后面不跟 foo 的字符串。

  6. 管道符号 |:用于表示“或”关系。例如 foo|bar 可以匹配 foo 或 bar。

  7. 转义字符\ 用于在特殊字符前添加一个反斜杠,使其成为普通字符。例如 \(表示匹配左圆括号,而不是起始一个新的捕获组。

  8. 位置标志i 表示忽略大小写,m 表示多行模式,g 表示全局匹配。例如 /foo/i 将匹配 "Foo" 和 "foo",而 /^foo/m 将匹配每个段落的开头处的 "foo"。

  9. 边界匹配器\b 表示单词边界,\B 表示非单词边界。例如 \bfoo\b 只会匹配 "foo"而不是 "food" 中的 "foo"。

  10. 选择器/元字符.表示匹配除换行符外的任意单个字符。例如 .*将匹配任意数量的任意字符。

  11. 反向引用\number 表示引用前面捕获组中的内容。例如 (.)\1 将匹配两个相同的字符。

  12. 条件分支(?=condition)true-part|false-part 或 (?<!condition)true-part|false-part 根据条件是否满足来选择匹配 true-part 还是 false-part。例如 (abc)?(?(1)\d+\.\d+|\d+)只有当前面匹配到 "abc" 时,才会继续匹配后面的浮点数。

  13. 环视断言(?<=...) 和 (?<!...) 分别表示肯定后顾前瞻和否定后顾前瞻,只影响当前匹配的结果而不改变主匹配的内容。例如 (?<=abc).*(?=def)只匹配位于 "abc" 和 "def" 之间的字符。


掌握以上这些正则表达式元素,将有助于你更好地编写和理解复杂的正则表达式。请注意,虽然正则表达式功能强大,但在编写时仍应力求简洁,以免造成不必要的性能开销。 

使用正则表达式进行文本处理的几种常用方法: 

  • test():测试一个字符串是否匹配某个模式。

                        返回值:如果匹配成功返回 true,否则返回 false。

const regex = /(\w+)\s+(\w+)/;
const match = regex.exec("John Doe");
console.log(match); // 输出:["John Doe", "John", "Doe"]
  • match():从字符串中获取所有匹配某个模式的结果。 

                         返回值:如果没有找到匹配项,返回 null;如果有多个匹配项,返回一个数组,其中每个元素都是一个 Match 对象;只有一个匹配项时,也可能返回一个 Match 对象。 

const regex = /lo/g;
const matches = "Hello, world!".match(regex);
console.log(matches); // 输出:["lo", "lo"]
  • search():查找字符串中的第一个匹配项,并返回其索引位置。 

                            返回值:找到匹配项时返回其开始位置的索引,没有找到时返回 -1         

const regex = /world/;
const index = "Hello, world!".search(regex);
console.log(index); // 输出:7
  • replace():使用给定的替换串替换字符串中与指定模式匹配的所有子串。 

                              返回值:处理后的字符串。                 

const regex = /world/g;
const replacedStr = "Hello, world! world again".replace(regex, "JavaScript");
console.log(replacedStr); // 输出:"Hello, JavaScript! JavaScript again"
  • split():将字符串分割成多个子串,子串由正则表达式匹配到的内容或分隔符决定。 

                        返回值:一个包含子串的数组。 

const regex = /,/g;
const splitArray = "One, Two, Three".split(regex);
console.log(splitArray); // 输出:["One", "Two", "Three"]

通过这些方法,你可以轻松地利用正则表达式进行文本处理和验证。 

常用正则示例: 

在前端开发中,正则表达式(Regular Expression)经常被用来验证用户输入、处理字符串、提取数据等任务。以下是一些常见的正则表达式示例:

  •  邮箱地址验证: 
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

// 使用test()方法验证邮箱是否有效
console.log(emailRegex.test("example@example.com")); // 输出:true
  • URL 地址验证: 
const urlRegex = /^(http|https):\/\/[^ "]+$/;

// 使用test()方法验证URL是否有效
console.log(urlRegex.test("https://www.example.com")); // 输出:true
  • 手机号码验证(中国大陆地区手机号码): 
const mobilePhoneRegex = /^1[3-9]\d{9}$/;

// 使用test()方法验证手机号码是否有效
console.log(mobilePhoneRegex.test("13812345678")); // 输出:true
  • 密码强度验证(至少包含数字、大写字母、小写字母和特殊字符中的任意三种): 
const passwordRegex = /^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[\W]).{8,}$/;

// 使用test()方法验证密码是否满足要求
console.log(passwordRegex.test("Pa$$word123")); // 输出:true
  • 纯字母组成的用户名验证: 
const usernameRegex = /^[a-zA-Z0-9_]+$/;

// 使用test()方法验证用户名是否有效
console.log(usernameRegex.test("username123")); // 输出:true
  • 纯数字组成的数字串验证: 
const numericStringRegex = /^\d+$/;

// 使用test()方法验证串是否有效
console.log(numericStringRegex.test("123456")); // 输出:true
  • 中文字符验证:
const chineseCharacterRegex = /^[\u4e00-\u9fa5]+$/;

// 使用test()方法验证字符串是否全为中文字符
console.log(chineseCharacterRegex.test("你好世界")); // 输出:true
  • 特定长度的字符串验证: 
const lengthValidationRegex = new RegExp(`^.{${length},}$`);

// 使用test()方法验证字符串长度是否符合要求
console.log(lengthValidationRegex.test("example")); // 当length为7时输出:true
  • 匹配 CSS 类名: 
const cssClassNameRegex = /^[a-zA-Z][a-zA-Z0-9_-]*$/;

// 使用test()方法验证CSS类名是否有效
console.log(cssClassNameRegex.test("my-class-name")); // 输出:true
  • 匹配 HTML 标签: 
const htmlTagRegex = /<([a-zA-Z][a-zA-Z0-9]*)\b[^>]*>(.*?)<\/\1>/gim;

// 使用match()方法匹配HTML标签
console.log("<p class='example'>Hello, World!</p>".match(htmlTagRegex)); // 输出:["<p class='example'>Hello, World!</p>", "p", undefined]
  • IP 地址验证: 
const ipAddressRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;

// 使用test()方法验证IP地址是否有效
console.log(ipAddressRegex.test("192.168.1.1")); // 输出:
  • IPv6 地址验证:
const ipv6AddressRegex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;

// 使用test()方法验证IPv6地址是否有效
console.log(ipv6AddressRegex.test("2001:0db8:85a3:0000:0000:8a2e:0370:7334")); // 输出:true
  • 匹配 JSON 对象: 
const jsonStringRegex = /^\s*{\s*"[^"]+"\s*:\s*"[^"]+"\s*,?\s*}+\s*$/;

// 使用test()方法验证JSON字符串是否有效
console.log(jsonStringRegex.test('{"key": "value"}')); // 输出:true
  • 日期格式验证(例如:YYYY-MM-DD 或 YYYY/MM/DD):
const dateRegex = /^\d{4}-\d{2}-\d{2}$/; // 或者 /^\d{4}\/\d{2}\/\d{2}$/

// 使用test()方法验证日期格式是否有效
console.log(dateRegex.test("2022-03-0.jpg")); // 输出:false
console.log(dateRegex.test("2022/03/03")); // 输出:(对于/分隔符版本) true
  • 验证信用卡号(仅适用于 Visa 和 Mastercardundefined 卡种): 
const creditCardRegex = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/;

// 使用test()方法验证信用卡号是否有效
console.log(creditCardRegex.test("4111111111111111")); // 输出:true
  • 匹配身份证号码(中国大陆地区): 
const idCardRegex = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;

// 使用test()方法验证身份证号码是否有效
console.log(idCardRegex.test("123456789012345678")); // 输出:true
  • 匹配 UUID(通用唯一标识符): 
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;

// 使用test()方法验证UUID是否有效
console.log(uuidRegex.test("c5db69d2-6dc1-41c2-b1ae-a0e09f70b1a8")); // 输出:true

当需要在文本中快速高效地处理某些特定模式时,正则表达式是一个非常有用的工具。它的学习曲线可能稍微陡峭一些,但一旦掌握了基本概念和常用语法,就能解决很多棘手的文本处理问题。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值