よく使われる正規表現のまとめ
正規表現、正規表現とも呼ばれる正規表現。 (英語: Regular Expression、コード内では regex、regexp、または RE と略されることがよくあります)、コンピューター サイエンスの概念。正規表現は、単一の文字列を使用して、特定の構文ルールに一致する一連の単語を記述および照合します。多くのテキスト エディタでは、特定のパターンに一致するテキストを取得および置換するために正規表現がよく使用されます。
正規表現、私のように何回も習ったけどまだ混乱している人はいませんか?そうですね、実は私はまだ十分に練習ができていません。いわゆる過去を振り返り、新しいことを学ぶことができます。今日はこの自慢の正規表現を復習しましょう。
正規表現が必要なのはなぜですか?実際、それはコンピュータが愚かだからです(これは私が言ったことではありません)たとえば、123456@qq.com は、私たちが見ると電子メールアドレスですが、コンピュータはそれを認識しないので、私たちはそれを持っています。コンピュータが理解できるいくつかの言語を使用してルールを作成し、このルールに適合するものをメールボックスに伝えることで、コンピュータは対応するものを見つけるのに役立ちます。したがって、通常のルールは、ログインの検証、指定されたものの検索など、必要な一部の操作を完了するためのルールを設定するために使用されます。あまりにも多くを言うのは冗長なので、直接トピックに進みましょう。
規則性を定義します:
1 var re = new RegExp("a"); //RegExp オブジェクト。パラメータは、作成したいルールです。この方法を使用しなければならない状況があります。これについては後述します。
2 var re = /a/; // パフォーマンスを向上させるために、省略メソッドを使用することをお勧めします。空にすることはできません。
1 test(): 文字列内の一致を検索します。通常のコンテンツは、見つかった場合は true を返し、それ以外の場合は false を返します。
使用法: Regular.test (string)
例: 数値であるかどうかを判断します
var str = '374829348791';
var re = /D/; // D は非数字を表します
if( re.test(str) ){ // 文字列内に非数字が見つかったことを意味します。
alert('すべての数字ではありません');
}else{
alert('すべての数字');
}
正規表現にはさまざまな意味を表す記号がたくさんあります。上記の D や以下のようなさまざまなルールを定義できます:
s: スペース
S: 非スペース
d: 数字
D: 非数字
w: 文字 (文字、数字、 underscore_ )
W: 文字以外の例: 数字ではない文字はありますか? (以下は例に基づいてよく使用される文字について説明し、最後にまとめます。)
2 search(): 文字列内で検索通常のルールに準拠するコンテンツの場合は、その出現位置を返します (0 から始まり、複数の文字が一致した場合は最初の文字の位置のみが返されます)。検索が失敗した場合は -1 が返されます。
使用法: 文字 String.search(正規)
文字列内の複合正規表現の内容を検索します。大文字と小文字を無視: i——ignore (通常はデフォルトで大文字と小文字が区別されます。大文字と小文字が区別されない場合は、通常の最後に識別子 i を追加します)
例: 文字列内で文字 b を検索すると、次のようになります。大文字と小文字は区別されません
var str = 'abcdef';
var re = /B/i;
//var re = new RegExp('B','i'); と書くこともできます。このように
alert( str .search(re) ); // 1
3 match() は文字列内の複合ルールの内容を検索します。検索が成功すると、その内容が返されます。配列の形式。失敗した場合は null が返されます。
使用法: String.match (正規)
量指定子: + 少なくとも 1 つの一致が不確実な回数発生します (一致とは検索を意味します)
グローバル一致: g——global (正規のデフォルト、複合物が検索ルールの内容で検索が終了します)
例: 指定された形式ですべての数値を検索し、次のように 123、54、33、879 を検索します
var str = 'haj123sdk54hask33dkhalsd879';
var re = /d+/ g; // 毎回少なくとも 1 つの数値を照合し、グローバルに照合しない場合は、数値 123 が見つかった時点で停止します。グローバル マッチングでは、最初から最後までルールに一致するものが検索され、123 のみが表示されます。プラス記号がない場合、一致結果は 1、2、3、5、4、3、3、879 になります。これは、プラス記号を使用すると、毎回少なくとも 1 つの一致する数字が存在することになります。
alert( str.match(re) ); // [123, 54, 33, 879]
4 replace(): 通常のパターンに一致する文字列を検索して置換します対応する文字列 String を使用します。置き換えたコンテンツを元に戻します。
使用法: String.replace (通常の新しい文字列/コールバック関数) (コールバック関数では、最初のパラメーターは毎回正常に一致する文字を参照します)
|: または を意味します。
例子:敏感词过滤,比如 我爱北京天安门,天安门上太阳升。------我爱*****,****上太阳升。即北京和天安门变成*号,
一开始我们可能会想到这样的方法:
var str = "我爱北京天安门,天安门上太阳升。";
var re = /北京|天安门/g; // 找到北京 或者天安门 全局匹配
var str2 = str.replace(re,'*');
alert(str2) //我爱**,*上太阳升
//这种只是把找到的变成了一个*,并不能几个字就对应几个*。
要想实现几个字对应几个*,我们可以用回调函数实现:
var str = "我爱北京天安门,天安门上太阳升。";
var re = /北京|天安门/g; // 找到北京 或者天安门 全局匹配
var str2 = str.replace(re,function(str){
alert(str); //用来测试:函数的第一个参数代表每次搜索到的符合正则的字符,所以第一次str指的是北京 第二次str是天安门 第三次str是天安门
var result = '';
for(var i=0;i result += '*'; } return result; //所以搜索到了几个字就返回几个* }); alert(str2) //我爱*****,***上太阳升 //整个过程就是,找到北京,替换成了两个*,找到天安门替换成了3个*,找到天安门替换成3个*。 replace是一个很有用的方法,经常会用到。 正则中的字符 ():,小括号,叫做分组符。就相当于数学里面的括号。如下: var str = '2013-6-7'; var re1 = /\d-+/g; // 全局匹配数字,横杠,横杠数量至少为1,匹配结果为: 3- 6- var re1 = /(\d-)+/g; // 全局匹配数字,横杠,数字和横杠整体数量至少为1 3-6- var re2 = /(\d+)(-)/g; // 全局匹配至少一个数字,匹配一个横杠 匹配结果:2013- 6- 同时,正则中的每一个带小括号的项,都叫做这个正则的子项。子项在某些时候非常的有用,比如我们来看一个栗子。 例子:让2013-6-7 变成 2013.6.7 var str = '2013-6-7'; var re = /(\d+)(-)/g; str = str.replace(re,function($0,$1,$2){ //replace()中如果有子项, //第一个参数:$0(匹配成功后的整体结果 2013- 6-), // 第二个参数 : $1(匹配成功的第一个分组,这里指的是\d 2013, 6) //第三个参数 : $1(匹配成功的第二个分组,这里指的是- - - ) return $1 + '.'; //分别返回2013. 6. }); alert( str ); //2013.6.7 //整个过程就是利用子项把2013- 6- 分别替换成了2013. 6. 最终弹出2013.6.7 match方法也会返回自己的子项,如下: var str = 'abc'; var re = /(a)(b)(c)/; alert( str.match(re) ); //[abc,a,b,c]( 返回的是匹配结果 以及每个子项 当match不加g的时候才可以获取到子项的集合) [] : 表示某个集合中的任意一个,比如 [abc] 整体代表一个字符 匹配 a b c 中的任意一个,也可以是范围,[0-9] 范围必须从小到大 。 [^a] 整体代表一个字符 :^写在[]里面的话,就代表排除的意思 例子:匹配HTML标签 比如
var re = /<[^>]+>/g; // 左括弧の間にある少なくとも 1 つの右括弧以外のコンテンツと一致します (タグ内に属性などがあるため)。右括弧に一致します var re = /<[wW]+>/g // 左括弧の中央にある少なくとも 1 つの文字または文字以外のコンテンツと一致し、次に右括弧に一致します // 実際には、これは、左括弧を見つけることです。その後、中央に少なくとも 1 つのコンテンツが存在する可能性があります。右括弧が見つかった場合、それはラベルを意味します。 : 任意の文字
: 実数点
b : 独立部分 (開始、終了、スペース)
B : 非独立部分
最後の 2 つを見てみましょう:
var str = 'onetwo';var str2 = "one two";var re = /oneb/; // e はその後独立している必要があり、開始、スペース、または終了にすることができますalert( re. test (str) ); //falsealert( re.test(str2) );//true
例: クラス名を使用してノードを取得する関数を作成します:
これの前に関数:
function getByClass(parent,classname){if(parent.getElementsByClassName){returnparent.getElementsByClassName(classname);}else{var results = new Array ();//クラス boxvar elems =parent.getElementsByTagName("*"); で取得したすべての要素を格納するために使用されますif(elems[i].className==classname){ results.push(elems[i]); } } return results; } } 実際たとえば、タグ内に 2 つのクラスがある場合、または
for(var i =0;i