js正则表达式

JS正则表达式验证表单 我们通常写的表单中,往往要判断用户填的是否符合要求,那么可以通过js的正则式来验证。js的正则式语法可参考菜鸟教程:JS正则表达式 下面是我的表单页面: 在点击下一步的时候,可以通过JS来控制下,如果不符合要求,则不进行跳转。下面代码中的变量名都是输入框所填项的英文,应该没歧义吧,我就不展示HTML部分了,直接给出js判断。 $(document).ready(function() { ... 阅读详情

js正则表达式

做字符串的增删改查

ant-design例子

:formatter="value => `$ ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')"
:parser="value => value.replace(/\$\s?|(,*)/g, '')"

简单的sample

常用的方法:

test:返回值是true或false

match:会返回匹配的字符组成的数组。若未匹配到则返回null。

let hd='jingdezhnejig23487669djiel2345';
let nums=[...hd].filter(item => {
  return item>='0' && item<='9'
})
console.log(nums)
nums=[...hd].filter(item => {
  return !Number.isNaN(parseInt(item))
})
console.log(nums)
console.log(hd.match(/\d/g))

创建正则表达式

字面量

不能使用变量,使用变量需要用eval

let hd='jingaghihecjijguirueit';
let a='u';
console.log(eval(`/${a}/g`).test(hd))

new RegExp

let pro = prompt('请输入要高亮的字符,支持正则')
let rg=new RegExp(pro,'g');
let titleDiv=document.querySelector('.title')
titleDiv.innerHTML=titleDiv.innerHTML.replace(rg,(search)=>{
  return `<span style="color:red">${search}</span>`
})

—————————————————————————

选择符

首先,//正则表达式里面的是一个整体。那看的时候怎么去划分。

|:选择符。分道扬镳,左右两种

():分组。子表达式,整个表达式的一部分。

let tel='010-66666666';
// 1.这种问题在于:'010'也会匹配到,因为 | 划分开来了。
console.log(/010|021\-\d{8}/g.test(tel))
// 纠正方法:加上分组()
console.log(/(010|021)\-\d{8}/g.test(tel))
// 2.首尾还要加上^ &
console.log(/^(010|021)\-\d{8}$/g.test(tel))

[] 原子表 和 () 原子组

[]

[xxx]最后整个这里表达的是单个字符。[abcde]表达的是一种或的关系,(a|b|c|d)

只要字符出现在原子表中就匹配,这是可选的意思。

  1. []表达的是一种范围。[a-z],匹配小写字母,这里的 - 表达就是一种范围。[abcde]表达的就是a-e范围。

  2. []中的^符号表达的是取非的意思。比如,[^a-z]非小写字母。

  3. []中的特殊字符会被当做普通字符来看待。例如[(a)],会匹配(、a、)、这三个字符。

几个例子

// 是否全为英文
const str='';
/^[a-zA-Z]+$/.test(str);
// 是否包含英文
/[a-zA-Z]+/.test(str)

正则表达式中中括号的三种用途 [] - JavaShuo

正则表达式(括号)、[中括号]、{大括号}的区别小结 - 安静的女汉纸 - 博客园

() 分组

第三章 正则表达式括号的作用_JavaAlliance-CSDN博客_正则表达式括号

获取(引用)分组

1.match

match返回的结果,在匹配到的情况下,第1个参数是整个匹配的结果,之后就是各个分组匹配到的内容。

2.RegExp.$1-$9

var regex=/(\d{4})-(\d{2})-(\d{2})/;
let dateStr='2021-11-26';
dateStr.match(regex);

console.log(RegExp.$1);

反向引用

引用之前匹配到的分组,就叫反向引用。

\1 匹配之前同样的那个字符,我要和它一样就是这个意思。\2 \3同理

var regex=/\d{4}(-|\/|\.)\d{2}\1\d{2}/;  //下面有代码讲解
var string1="2017-06-12";
var string2="2017/06/12";
var string3="2017.06.12";
var string4="2016-06/12";
console.log(regex.test(string1)); // true
console.log(regex.test(string2)); // true
console.log(regex.test(string3)); // true
console.log(regex.test(string4)); // false

这里有一个很有意思的例子

var regex = /^((\d)(\d(\d)))\1\2\3\4$/;  //下面有代码讲解
var string = "1231231233";
console.log( regex.test(string) ); // true
console.log( RegExp.$1 ); // 123
console.log( RegExp.$2 ); // 1
console.log( RegExp.$3 ); // 23
console.log( RegExp.$4 ); // 3

*有一个例外的情况,当引用的分组不存在时,\会对后面的字符进行转义。\1就表示对后面的1进行了转义。

var regex = /\1\2\3\4\5\6\7\8\9/; console.log( regex.test("\1\2\3\4\5\6\7\8\9") );   //true console.log( "\1\2\3\4\5\6\7\8\9".split("") );//下面有代码讲解

具体案例

首字母转换成大写

// 有几种方法
var regex=/\b[a-zA-Z]/g
var regex=/(?:^|\s)\w/g

var str='my name is lucy !'
const string=str.replace(regex,(c)=>{
    return c.toUpperCase();
})
console.log(string);
// 还有一种做法
name = 'aaa bbb ccc'; 
uw=name.replace(/\b\w+\b/g, function(word){   
    return word.substring(0,1).toUpperCase()+word.substring(1);
});
// https://www.w3school.com.cn/jsref/jsref_replace.asp

转义

\通常表示转义

*题外话

用对象的方式,因为'\d'==='d',所以new RegExp('\\d+\\.\\d+'),可能需要多加一个斜杠。

字符有多个含义,把它转换一下

^ $ :限定边界

^:以xxx开始,限定开始边界

$:以xxx结束,限定结束边界

这是限定我们的边界。表示的是一种完全的严格的验证。

以下是一个例子:

如果不加^$,找到了就认为是成功了;

现在我们需要完全匹配,对整个字符串加以限定。用于进行完整性验证,否则就是部分验证。

<input type="text" name="user">
<span></span>

document.querySelector('input[name="user"]').addEventListener('keyup',function(){
    console.log(this.value)
    var reg=/^[a-zA-Z]{3,6}$/
    var text=reg.test(this.value)?'正确':'错误'
    document.querySelector('span').innerHTML=text
})

元字符

重复量词 表示数量的重复量词匹配的都是一连串的字符串,也就是一种贪婪匹配。

比如\d+

const str='houdunren 2021';
const reg=/\d+/g;
// +:一个或者多个
// 它这里一下就匹配到了4个
str.match(reg); // ['2021']

\d和\D

let str='houdunren 2021';
console.log(str.match(/\D+/g)); // ['houdunren ']

str=`
  张三:010-88888888,李四:021-88888888  
`
// 现在我们想匹配到中文
str.match(/[^:\d-,\s]+/g) // ['张三','李四']

\s和\S

\s表示空白字符:空格、tab、换行符、分页符,这些都是空白字符

\w和\W

这里有一个匹配用户名的例子

需求:以字母开头,后跟字母、数字、下划线,5-10位

综合来使用:结合穷糊匹配,禁止贪婪,模式修正符,断言匹配

const str='8houdunren';
const reg=/^[a-zA-Z]\w{4,9}$/;
console.log(reg.test(str));

点元字符 .

  1. 点元字符:任意字符(除了换行符)。所以你想单纯匹配点就要转义\

let str='https://wetest.qq.com'
let reg=/^https?:\/\/\w+\.\w+\.\w+$/
console.log(str.match(reg))

  1. 但是它无法匹配换行符

s模式:视为单行模式。将换行符当成普通空白来使用。

let hd=`
houdunrencom
houdun
`
console.log(hd);
console.log([...hd]);
console.log(hd.match(/.+/g));
console.log(hd.match(/.+/s));

额外:空格在正则中是普通字符,在正则中直接敲空格就行,或者用\s。

匹配任意一个字符

这种表达方式很巧妙,\s表示的空白,\S表达的是非空白,它们是取非的关系。那我[\s\S]不就表达的是任意字符了么。[\s\S] [\d\D]

let hd=`
<span>
    houdunrencom @@@@@
    houdun
</span>
`
console.log([...hd]);
console.log(hd.match(/<span>[\s\S]+<\/span>/));

表达的范围从小到大:a \d \w . [\s\S]

i与g模式修正符

模式修正符:把正则表达式的运行方式发生改变

/i:忽略大小写。例如邮箱和网址大写也是可以的

/g:全局。贪婪

m模式

这个例子稍微有点复杂

  1. /m:首先多行模式。把每一行单独提取出来匹配,m多行模式主要是针对^$起作用,让它匹配到每一行的头和尾,因为如果不设置/m的话,一个字符串无论是否换行只有一个开始^和结尾$。一个大字符串需要每一行单独处理的时候用m模式就非常合适。

  2. 然后是另外一个细节的点,要注意行首和行尾的空格,有必要时加入\s*

let hd=`
  #1 js,200元 #
  #2 php,300元 #
  #91 houdunren.com # 后盾人
  #3 node.js,180元 #
`
console.log([...hd]);
// console.log(hd.match(/\s*#\d+\s+.+\s+#\s+/g))
// 这里尤其要注意行首行尾的\s*
console.log(hd.match(/^\s*#\d+\s+.+\s+#$/gm))
let lines = hd.match(/^\s*#\d+\s+.+\s+#$/gm);
let lessons=lines.map(line=>{
    console.log(line)
    console.log('line.match===')
    console.log(line.match(/\s*#\d+\s+(.+),(.+)\s+#/))
    let [,name, price]=line.match(/\s*#\d+\s+(.+),(.+)\s+#/);
    // 还有一种方法是使用replace,把头和尾都替换成''
    // let [name,price]=
    // line.replace(/\s*#\d+\s+/,'').replace(/\s+#/,'').split(',')
    return {name,price}
})
console.log('lessons:')
console.log(lessons)

u模式

这里涉及到了很多字符编码的知识点。

【转】正则表达式(三):Unicode诸问题(下)_carvin_happy的专栏-CSDN博客

前端js正则\p的使用, 全局标志g的问题_王为仁的博客-CSDN博客

字符编码笔记:ASCII,Unicode 和 UTF-8 - 阮一峰的网络日志

彻底弄懂 Unicode 编码_hezh1994的博客-CSDN博客_unicode编码

其实这里都是unicode编码的知识。

\p都需要结合/u模式一起来使用

\p{L}:表示字母

\p{N}:表示数字

\p{P}:匹配标点符号

还有它的unicode script属性,可以区分不同国家的语言

let hd=`houdunren2010.不断发布教程,加油!英文标点!`
console.log(hd.match(/\p{P}/gu))
console.log(hd.match(/\p{sc=Han}/gu))

还有一个要注意的:如果遇到宽字节,也就是4个字节的,也需要加上/u

lastIndex与exec方法

exec方法的优势就是能够记录每一个匹配字符串的详细信息,它的原理是改变lastIndex。

获取每一个主信息

var str="I love antzone ,this is animate"; 
var reg=/an/;
console.log('非全局-----------');
console.log(str.match(reg));
console.log('-----------');
console.log(reg.lastIndex);
console.log(reg.exec(str));
console.log(reg.lastIndex);
reg=/an/g;
console.log('全局-----------');
console.log('match-----------');
console.log(reg.lastIndex);
console.log(str.match(reg));
console.log(reg.lastIndex);
console.log('exec-----------');
console.log(reg.lastIndex);
console.log(reg.exec(str));
console.log(reg.lastIndex);
console.log(reg.exec(str));
console.log(reg.lastIndex);
console.log('while-----------');
reg.lastIndex=0;
console.log(reg.lastIndex);
let mat=[]
while(mat=reg.exec(str)){
   console.log(mat); 
}

js正则表达式之exec方法讲解_uwenhao2008的博客-CSDN博客_正则exec

y模式

lastIndex只在g模式和y模式下有效果,其他的情况这个lastIndex其实是被完全忽略掉了。只有g模式和y模式会读取并更新lastIndex的值。

y模式和g模式的区别:g模式会跳过不匹配的字符串,继续向后搜索;而y模式,只要lastIndex当前位置字符串不匹配,就会立马停止不会再继续向后搜索了。那这个就是两者表现上的区别。y 模式表示匹配到不符合的就停掉,不会继续往后匹配,必须连续的符合条件的。

而从语法上来讲,y模式改变了^字符的含义,不再表示整个字符串的开始位置,而是当前的偏移位置。

var re = /^./y; 
console.log(re.test("foo")); //true 
console.log(re.lastIndex); //1 
console.log(re.test("foo")); //true 
console.log(re.lastIndex); //2

JavaScript:正则表达式的/y标识 - 紫云飞 - 博客园

作用:让我们匹配大字符串的时候效率更高

let hd=`后盾人QQ群:6666666666,8888888888,9999999999后盾人不断分享视频教程,后盾人网址是 www.houdunren.com`
let reg=/(\d+),?/y
let res;
console.log('---')
reg.lastIndex=7
let qq=[]
while(res=reg.exec(hd)){
    console.log(res)
    qq.push(res[1])
}
console.log('qq')
console.log(qq)

基于正则表达式JavaScript/C++语法高亮(js版) JavaScript的语法高亮一直是个难点,因为需要语义分析以确定/是除法操作的开始还是正则表达式的开始。目前关于高亮js的语法高亮都不是很理想,尤其是syntaxhighlighter(你待会看到的代码高亮效果就是它弄的, csdn说, 就用sh了)的效果算是最差的了,根本就不高亮正则、数字等,太不敬业了。假设你写的代码是足够规范的,而且不考虑效率的话,那么你使用我这个高亮js一般不会有问题。 阅读详情

相关推荐

Python数据可视化 Pyecharts 制作 Map 地图

大家好,我是Mr数据杨。想象一下,作为一名军师,如诸葛亮或郭嘉,'Map’就如同那战争的沙盘,兵马行动的轨迹,都需要准确的地图作为基础。‘基本设置’,就如同摆设这张战争沙盘,规定棋子的起始位置。‘数据配置选项’和’地图数据项’,就好比是军师们手中的情报,了解各路诸侯的兵力、粮草、地形等重要信息,以便于他们更好地布局。‘Demo’则代表着练兵之地,军师们可以在此基于已有数据,试验各种战术。

Mr数据杨 4万+

常用js限制输入、常用js正则表达式

不允许输入空格 onkeyup="this.value=this.value.replace(/\s+/g,'')" 只允许输入数字 onkeyup="this.value=this.value.replace(/\D/g,'')" 不允许输入汉字 onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" /**价格输入限制(数字 两位小数 不能为0)*

福州零叶的博客 513

QT-Creator安装教程(windows)

本文介绍了Qt的下载安装步骤:1)通过镜像源下载安装包;2)运行exe文件时使用命令行参数指定镜像地址;3)在安装过程中选择路径和自定义安装组件,包含QT5和QT6版本的详细安装说明;4)安装后可继续添加扩展包或卸载组件。重点提示了QT6必须勾选的关键组件,并提供了组件管理的操作方法。

qq_53545309的博客 2974

react学习之路:InputNumber的parser在ts里面报类型错误

Type '(value: string | undefined) => string' is not assignable to type '(displayValue: string | undefined) => 0 | 2 | 20'. Type 'string' is not assignable to type '0 | 2 | 20'.

qqpaowenquan的博客 441

formatter的用法,深拷贝, Object.assign 方法实战。

修改内容,没有点击确定的时候,表格的数据会随着编辑的更新而更新,这是由于数据没有序列化,使用JOSN进行一次序列号。这样row与this.familyPerson.familyPersonForm指向的就不在是一个地址,但是导致的问题则是编辑后点击确定无法更新表格数据。row 是当前行的数据,column 是当前列的数据,cellValue 是当前单元格的值。这样做的目的是为了避免直接修改 row 对象,因为 row 对象是直接从父组件传递过来的,直接修改它可能会导致一些不可预见的问题。

qq_63322025的博客 1461

正则替换字符串的全角、半角标点符号

感谢【火龙果】,钦佩他的研究精神。http://topic.csdn.net/u/20080925/15/41b814bf-fcaf-4b37-be91-10561a102768.html测试代码如下:class T {  public static void main(String... args) {    String str = "!!!!去符号标号!!当然。!!..**半角";    S

老紫竹的专栏 1万+

关于formatter(格式化器)函数的使用

1、formatter函数作用 formatter(格式化)函数可以用来对渲染在单元格中的数据做操作,(比如:后台返回状态值是数字,可以根据相应的值做判断等等)。 2、formatter函数所带参数及基本形式 默认带有三个参数: value: 字段值 row: 单元格行记录数据 index: 单元格行索引 formatter: function(value, row, index) { ...(你所要进行操作执行的代码块) } 参考示例: 3、其他 当然formatter.

log22_rain的博客 1万+

JSJavaScript正则表达式基础

目录一、正则表达式二、字符串使用正则表达式三、常用例子 一、正则表达式 关于正则表达式,我在另一篇博客记录过:正则表达式 二、字符串使用正则表达式 三、常用例子

小绵杨 2191

JS正则表达式介绍(JavaScript正则表达式

JavaScript正则表达式是一种强大的文本处理工具,掌握其基本语法和高级技巧可以大幅提高文本处理效率。正则表达式由元字符、量词、分组等组成,通过合理组合这些元素,能够实现复杂的模式匹配需求。正确理解和使用标志(flags)可以让正则表达式匹配更精确、更高效,适应不同的文本处理需求。在实际应用中,需要注意正则表达式的可读性和性能问题,避免过于复杂的模式导致难以维护或性能下降。

Dontla的博客 1728

JavaScript】一文了解JS正则表达式

详解JavaScript正则表达式

ztK63LrD的博客 2164

常用js正则表达式 Javascript正则表达式实战手册

最近做了几个项目,发现正则表达式用得越来越多了。我个人的习惯是,能通过查手册获取的东西绝不死记硬背,虽然大多数技术网站都搜罗了一堆Javascript正则表达式的用法,但我还是想整理一份更有实战意义的手册。说白了就是,如果以后需要用到正则表达式,直接过来复制粘贴就行啦!我会尽量把排版做的漂亮一点,便于大家提高开发效率。前面是Javascript正则表达式的简明用法,实战内容请跳到最后一节。   ...

xh601的博客 5296

JSJavaScript正则表达式详细使用

目录1、描述字符范围 : [ ]2、选择匹配:| 在上一篇博客中,记录了js正则表达式的简单使用:【JSJavaScript正则表达式基础。这篇博客学习一下JavaScript正则表达式的详细使用。 1、描述字符范围 : [ ] 在正则表达式语法中,方括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符~表示。如果在方括号内添加脱字符^前缀,还可以表示范围之外的字符。例如: [abc]:查找方括号内

小绵杨 1693

javascript(js)正则表达式基本用法

1.什么是正则表达式 Regular Expression使用单个字符串来描述、匹配一系列某个句法规则的字符串---按照某种规则去匹配符合条件的字符串 正则表达式应用场景 1.在IDE中使用正则表达式处理规则复杂的字符串查找、替换需求 2.在JavaScript程序设计中使用正则表达式处理字符串 3.在其他语言中 **推荐一个可视化正则表达式网站:http://regexper.com

on1y_rL的博客 625

JSJavaScript) 数据校验 正则表达式

正则表达式是一门独立的语言,有自己的语法,用来检测指定字符串是否符合特定的规则正则表达式就是用来定义规则的,全称为Regular ExpressionJavaScript中提供了RegExp对象,表示正则表达式创建正则表达式对象的方式有两种使用字面量定义举例//a是定义的匹配规则,i是忽略大小写//通过reg的test函数进行验证使用构造函数定义举例//定义正则表达式,注意这里的双斜杠中的内容不能以变量传入,只能直接写入//a是定义的匹配规则,i是忽略大小写。

欢迎您的莅临,感谢您的阅读。 3293

js正则限制字符串长度_JavaScript 正则表达式

js中正则表通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单,过滤(替换)页面内容中的一些敏感词汇。1.1什么是正则表达式正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。1.2 正则表达式的特点灵活性、逻辑性和功能性非常的强。可以迅速地用极简单的方式达到字符串的复杂控制。对于刚接触的人来说,比较晦...

weixin_39651488的博客 1万+

{JS}JavaScript使用正则表达式

 正则表达式概述在前面已经涉及了一些正则表达式的用法,现在将系统地学习正则表达式的语法和用途。正则表达式主要用于进行字符串的模式匹配,例如判断一个字符串是否符合指定格式等。例如在windows下搜索文件,可以用“*”或者“?”这样的通配符。在正则表达式的语法中,有更多这样的符号用于表示一个字符串的模式,表7.1列出了所有的特殊符号,它们也被称为元字符。表7.1 正则表达式中的元字符

275

JavaScript正则表达式

JS代码 <script> // QQ号 var num = "10566"; var qq = /^[1-9]{1}([0-9]{4,9})$/; //输出true console.log(qq.test(num)); // 手机号 var num1 = "17694531646"; var phoneNumber =/^[1-9]{1}[0-9]{10}$/; //输出true console.log(phon

xiaoguilong1的博客 298

JSJavaScript正则表达式

正则表达式 是一个描述字符模式的对象,JavaScript的RegExp类表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替换功能。JavaScript中的正则表达式用RegExp对象表示,可以使用RegExp()构造函数来创建RegExp对象,不过RegExp对象更多的是通过一种特殊的直接量语法来创建,正则表达式直接量定义为包含在一对斜线之间

Making Life Better. Making Others Better. 1357

js正则表达式全局匹配正斜杠_JavaScript正则表达式常用技巧

正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript 中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。正则表达式的掌握程度能粗略地看出程序员的技术底子,所以技术面试、编程竞赛等 都特别喜欢考察正则表达式。本篇就带你一起夯实一下 Ja...

weixin_39990250的博客 2139

Sigrity SystemSI仿真分析教程.rar

本资源是配合Sigrity SystemSI仿真分析教程专栏使用的,里面给出了所有文章对应的实例文件,方便读者能够快速上手和学会Sigrity SystemSI的功能本专栏详细介绍了Sigrity SystemSI和Sigrity System Explorer 仿真工具的所有功能的使用方法和教程,以及使用 Sigrity SystemSI和Sigrity System Explorer进行实例仿真分析,让读者能够从新手小白进阶到仿真高手Sigrity SystemSI仿真分析教程专栏链接https://blog.csdn.net/weixin_54787054/category_12845510.html?spm=1001.2014.3001.5482

上一篇: docker命令
下一篇: js正则表达式(二)
betterangela
博客等级 码龄12年 129粉丝 103原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值