方法を学ぶために、それは時々私は定期的に書き、私の悲惨なこと定期的にされているされ、自身がなぜ理解していない、態度を保持してみてください
しかし、私は本当に学びたい、ここで私は(基礎編は、私はほとんどの詳細のいくつかを書こうと、書いていない)彼の理解のすべての定期的な書き込みのために、一例で出てきます
私は、参照セクションを見ていきます<<定期的なガイドライン>>
複数の選択肢
縦型|別の代替が、|特に低い優先度には、括弧を使用することができ、彼を包ん
複雑な|シンプル書きます
グループexecを捕捉するために特別に設計
(2019年5月10日)スーパー強いが、私は今日見つけました
デフォルトの一致するエントリがによって得られた、追加の適合コンテンツパケットを介して、戻されます[]
let str = "aaabbb";
/*可以匹配到分组的内容*/
let reg=/(a+)(?:b+)/g;
let res = reg.exec(str);
console.log(res[1]);
let str = "cccddd";
/*可以匹配到分组的内容*/
let reg=/(c+)(d+)/g;
let res = reg.exec(str);
console.log(res[1]);
グッド入門情報リンク
置き換えます
第二个参数是函数
let url = "https://www.baidu.com?a=1&b=2";
let reg=/([^&#?+]+)=([^&?#+]+)/g;
let obj = {};
//$0 返回整体 $1返回第一个分组 $2 返回第二个分组
url.replace(reg, ($0,$1, $2) => obj[$1] = $2);
console.log(obj);
後方参照
\1 到\10
console.log('aaa bbbb ffffff 999999999'.match(/(\w)(?=\1\1\1)(\1)+/g));
反向引用的作用通常是用来查找或限定重复、查找或限定指定标识配对
([a-z])\1{2}
忽略分组 ?:
正向断言 ?=
反向断言 ?!
test 判断return false
exec 查看分组
search 返回第一个匹配的索引 到不到 -1
match 返回数组
split
replace
//找到重复的单词
const str = 'This is the theater you you have been to to';
str.replace(/\b([a-z]+)\s\1\b/ig,(match,...args)=>{
console.log(args[0]);
})
(そしてより多くの情報を見つけるために)周り探し
环视,在不同的地方又称之为零宽断言,简称断言。
?=P 可定顺序
?!P 否定顺序
?<=P 肯定逆序
?<!P 否定逆序
console.log(/(http|ftp|svn|abc)ddd/g.test('httpddd'));
定锚点
.*? 如果换行失败 改成 [\s\S]*?
正の整数+小数
console.log(/^[+]?[1-9]\d*(?:\.\d)?$/.test('+2.1'));
歴覧
?=P
肯定?!P
否定
(?=A)[A-Z]
A、続いて(?= A)の位置、
[AZ]は文字AZのいずれかと一致します
合成
左から右に定期的に試合は周りを見回している
(?=A)
と[A-Z]
、試合は通常の文字を消費しないので、周りを探し、だけでなく、マッチAの理由let s1='abcd abcd abbdABCD'; console.log(s1.match(/(?=a)[a-z]/g)); // ["a","a","a"] 字母序列后面跟着; let s1='aaaa;bbb;cccc;dddd;'; console.log(s1.match(/[a-z]+(?=;)/g)); //["aaaa", "bbb", "cccc", "dddd"] 常规匹配 let s1 = 'notexefile1.exe'; console.log(/.+(?=\.exe)/g.exec(s1)); //notexefile1
バリアントの使用
肯定变种 需求包含字母(不区分大小写),数字,6-16为密码 ^(?=.*?[a-zA-Z])(?=.*?[0-9])[a-zA-Z0-9]{6,16}$ 讲解 使用(?=.*?[a-zA-Z])限定后面的字符中至少有一个字母 使用(?=.*?[0-9])限定后面的字符中至少有一个数字 最后通过实际匹配正则[a-zA-Z0-9]{6,16}限定量词 否定变种 获取不是.exe后缀文件不含后缀的文件名 正则:(.+)(?!\.exe)\.[^.]+$ 肯定逆序 (?<=P) js不支持,但是好像是用webpack的时候是支持的 需求:获取name参数的值 正则:(?<=name=).+ 示例很直白,前面必须是name=,然后获取其后面的数据 let s1 = 'name=Zjmainstay'; console.log(/(?<=name=).+/g.exec(s1));// Zjmainstay
定期的なブロックの組み合わせ方法 - 文字、数字、特殊文字が含まれている必要があります
定期:
^(?=.*?[a-z])(?=.*?\d)(?![a-z\d]+$).+$
分析:
(?=.*?[a-z])
制限が手紙を持っている必要があります
(?=.*?\d)
制限事項は、デジタル化しなければなりません
(?![a-z\d]+$)
最初から最後までの制限は、すべての数字と文字にすることはできません
.+
任意の文字が存在しない場合に定義することができます^
し、$
文字列の先頭と末尾には、定義されました法の定期徐々に改善-特定のタグを除外する
p/a/img
HTMLタグをマッチング、定期:
</?(?!p|a|img)([^> /]+)[^>]*/?>
以下のために、シンプルなラベルからスタート
</p>
と<br />
、通常の書き込み:</?[^>]*/?>
私たちは、タグ名がこの方法で得られる観察する必要があります。
无属性值:<p> <([^>]+) 有属性值:<p class <([^ ]+) 无属性值自闭合:<br/> <([^/]+) 闭合标签:</p> </([^>]+)>
定期的に取得します。
</?([^> /]+)
最後に、我々は排除するために必要な
p/a/img
タグ名の前にマイナスを追加し、負シーケンシャル方式で周りを探し、ラベルを:</?(?!p|a|img)([^> /]+)[^>]*/?>
正则减除查错法-匹配异常原因查找
<ul> <li class="item">item1</li> <li class="item">item2</li> <li class="item bug">item3</li> <li class="item">item4</li> <li class="item">item5</li> </ul>
正则:
<li class="item">(.*?)</li>
问题
"item bug"
怎么解决正则
<li class="item[^"]*"
最终的正则
<li class="item[^"]*">(.*?)</li>
正则练习题
https://www.zybuluo.com/Zjmainstay/note/709093
匹配个数为偶数且不能为空
/^(..)+$/
正则查找不包含某些字符串
^((?!不想包含的字符串).)*$
解释
(?!不想包含的字符串) //是匹配位置
.是任意字符
表达式(?!hede).只执行一次
匹配0次或多次:((?!hede).)*
需求:匹配每行数据中以.jpg/.jpeg/.png/.gif结尾的图片名称(含后缀)
.+(?=\.(jpg|jpeg|png|gig)).+
......................................................................................................................................................................................................................................................................................................................................................................................................................