まず正規表現の利点について理解しましょう:
js で文字列を処理するメソッドを使用して、文字列内の数値を抽出する関数を作成します。
var str='dgh6a567sdo23ujaloo932'; function getNumber(obj){ var arr=[]; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ arr.push(obj.charAt(i)); } } return arr; }; console.log(getNumber(str)); //["6", "5", "6", "7", "2", "3", "9", "3", "2"]
上記の方法で文字列内の数値を取り出しましたが、必要なのは ['6','567','23','932'] の形式であり、関数を変換します。 :
function getNumber(obj){ var arr=[]; var temp=''; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ temp+=obj.charAt(i);//现将相邻的数字连接起来 } else{ //每当连接的数字断开时,就在这执行 if (temp) { arr.push(temp); temp=''; } }; } if (temp) { //这里的作用是为了显示最后数字的,原因不想解释 arr.push(temp); temp=''; } return arr; };
次に、正規表現を使用して、この関数によって実装された関数を解決します。
function getNumber2(obj){ var arr=[]; var re=/\d+/g; arr.push(obj.match(re)); return arr; };
プログラムの実行結果を詳しく見てみましょう:
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6a567sdo23ujaloo932'; /*function getNumber(obj){ var arr=[]; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ arr.push(obj.charAt(i)); } } return arr; };*/ function getNumber(obj){ var arr=[]; var temp=''; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ temp+=obj.charAt(i);//现将相邻的数字连接起来 } else{ //每当连接的数字断开时,就在这执行 if (temp) { arr.push(temp); temp=''; } }; } if (temp) { //这里的作用是为了显示最后数字的,原因不想解释 arr.push(temp); temp=''; } return arr; }; function getNumber2(obj){ var arr=[]; var re=/\d+/g; arr.push(obj.match(re)); return arr; }; console.log(getNumber(str)); console.log(getNumber2(str)); }; </script> <body> </body> </html>
上記の例から、正規表現による方法でも同じ効果があることがわかりますが、コードが短くなり、より効率的になります。これが正規表現の利点です。
正規表現は文字列をより効率的に処理するために作成されます。これらは文字列処理メソッドと同じですが、より効率的かつ簡潔です (正規表現は文字列のみを処理できます)。
var re=/ここに一致するものを記述する必要があります。記述しない場合は、シンボルに焦点を当てるだけです//これは、次の記事で直接使用します。
var re=new RegExp(); //この方法でも作成できることは皆さんご存知ですが、省略形との違いはパラメータの受け渡しが少し違うことです
(1)テスト
まずエスケープ文字について話しましょう:
/s スペース /S 非スペース /d 数字 /D 非数字 /w 文字 (文字、数字、アンダースコア) /W 非文字
例: 文字列がすべて数字であるかどうかを判断します
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6a567sdo23ujaloo932'; var str2='123456'; function allNumber(obj){ var re=/\D/;//定义正则对象匹配非数字,只要有不是数字的就是匹配结束返回结果 if (re.test(obj)) { alert('不全是数字'); } else{ alert('全是数字'); }; }; allNumber(str); allNumber(str2); }; </script> <body> </body> </html>
意味: 定期的に文字列を照合します。一致が成功した場合は、一致した位置が返されます。それ以外の場合は、文字列処理メソッドの Indexof() と同じ関数が返されます。
構文: string.search(re);
を追加します。
例、文字列内の特定の文字
の大文字と小文字を区別しない正規一致
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6b567sdo23ujaloo932'; function searchStr(obj){ var re=/B/i;//定义正则对象匹配b字符,不区分大小写 alert(obj.search(re)); }; searchStr(str); }; </script> <body> </body> </html>
意味: 定期的に文字列を照合します。照合が成功した場合は、成功した照合の配列が返されます。それ以外の場合は、Null
が返されます。
構文: string.match(re);
を追加する必要があります。
例: 文字列内の連続する数字を照合して配列に格納します (連続する数字は配列の項目として使用されます)
プログラム内の「 」は、一致が少なくとも 1 回発生することを意味します。なぜこれを行うのですか?
先ほど、「正規表現のデフォルトでは、一致が成功すると直ちに終了し、対応する値を返します。その後、文字列内で数値が一致すると終了し、数値が返されます」と述べました。このとき必要なのは、 g を使用してすべての要素に一致させることです。
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6b567sdo23ujaloo932'; function searchStr1(obj){ var re=/\d/; return obj.match(re); }; function searchStr2(obj){ var re=/\d/g; return obj.match(re); }; function searchStr3(obj){ var re=/\d\d/g;//全局匹配2位数 return obj.match(re); }; function searchStr4(obj){ var re=/\d+/g; return obj.match(re); }; console.log(searchStr1(str)); console.log(searchStr2(str)); console.log(searchStr3(str)); console.log(searchStr4(str)); }; </script> <body> </body> </html>
を置き換えます
意味: 定期的に文字列を照合し、正常に照合された文字列が新しい文字列に置き換えられる場合
構文: string.replace(re);
に置き換えます
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='daah6b5a7sdo23ujaloo932'; function replaceStr(obj){ var re=/a/g; //全局匹配a return obj.replace(re,'b'); }; console.log(replaceStr(str)); }; </script> <body> </body> </html>