正規表現入門教程&古典Javascript正規表現(share)
11087 ワード
前言
例: ^.+@.+\\..+$
このようなコードは何回も私自身を驚かしました.多くの人もこのようなコードに驚かされたのでしょう.この記事を読み続けると、このようなコードを自由に使えるようになります.
本文
教程:正規表現30分入門チュートリアル
正規表現を学ぶには良い教程です.正規表現に興味がありますが、よく知らない子供用の靴は参考にしてください.
以下の内容は JQueryを常用する数字タイプの検証正規表現の整理 和 クラシックJavascript正規表現 [ バックアップを取ってください ]
JQueryを常用する数字タイプの検証正規表現の整理 (間違いが多いので、適当に直してください.)
var regexEnum = {
intege:/^-?[1-9]*$/, //
intege1:/^[1-9]*$/, //
intege2:/^-[1-9]*$/, //
num:/^([+-]?)\d*\.?\d+$/, //
num1:/^([1-9]*|0)$/, // ( + 0)
num2:/^-[1-9]*|0$/, // ( + 0)
decmal:/^([+-]?)\d*\.\d+$/, //
decmal1:/^[1-9]*.\d*|0.\d*[1-9]\d*$/, //
decmal2:/^-([1-9]*.\d*|0.\d*[1-9]*)$/, //
decmal3:/^-?([1-9]*.\d*|0.\d*[1-9]*|0?.0+|0)$/, //
decmal4:/^[1-9]*.\d*|0.\d*[1-9]*|0?.0+|0$/, // ( + 0)
decmal5:/^(-([1-9]*.\d*|0.\d*[1-9]*))|0?.0+|0$/, // ( + 0)
email:/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/, //
color:/^[a-fA-F0-9]{6}$/, //
url:/^http[s]?:\/\/([\w-]+\.)+[\w-]+([\w-./?%&=]*)?$/, //url
chinese:/^[\u4E00-\u9FA5\uF900-\uFA2D]+$/, //
ascii:/^[\x00-\xFF]+$/, // ACSII
zipcode:/^\d{6}$/, //
mobile:/^(13|15|18)[0-9]{9}$/, //
notempty:/^\S+$/, //
picture:/(.*)\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$/, //
rar:/(.*)\.(rar|zip|7zip|tgz)$/, //
date:/^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/, //
qq:/^[1-9]*[1-9][0-9]*$/, //QQ
tel:/^(([0+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/, // ( , , )
username:/^\w+$/, // 。 、26
letter:/^[A-Za-z]+$/, //
letter_u:/^[A-Z]+$/, //
letter_l:/^[a-z]+$/, //
idcard:/^[1-9]([0-9]{14}|[0-9]{17})$/ //
}
クラシックJavascript正規表現 (間違いが多いので、適当に直してください.)
中国語の文字にマッチする正規表現:
[\u 4 e 00-\u 9 fa5]
二バイトの文字にマッチする(漢字も含む):
[^\x 00-\xff]
適用:文字列の長さを計算します.2バイトの文字長計2、ASCII文字計1)
Stringg.prototype.len=function(){return this.replace([^\x 00-\xff]/g,“aa”).length;]
空行にマッチする正規表現:
[\s|]*\r
HTMLタグにマッチする正規表現:
/<(.*)>.*<\/\1>|<(.*) \/>/
先頭のスペースにマッチする正規表現:(^\s*)|(\s*$)
アプリケーション:javascriptにはvbscriptのようなtrim関数がありません.私たちはこの表現を使って、次のように実現できます.String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
正規表現を使ってIPアドレスを分解し変換します.以下は正規表現を使ってIPアドレスにマッチし、IPアドレスを対応数値に変換するJavascriptプログラムです.
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g // IP
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
ただし、上記の手順は正規表現ではなく、直接にスプリット関数で分解するのが簡単かもしれません.手順は以下の通りです.
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP :"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
Emailアドレスにマッチする正規表現:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
URLにマッチする正規表現:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
正規表現を使って文字列中の繰り返しの文字を取り除くアルゴリズムプログラム:[注:このプログラムは正しくありません]var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) // :abcefgi
*注==================================================================================
もしvar s="abacabeefggareii"
結果は間違っています.結果はabeigcfggです.
正規表現の能力は限られています.
==================================================================================
もともとCSDNで繰り返し文字を除去するための表現を探していましたが、最終的に見つけられませんでした.これは私が考えられる最も簡単な実現方法です.考えは後から引用に向かって重複した文字を取り出して、重複していない文字を二番目の表現式にしてください.この方法は文字の順序に必要な文字があります.串刺しは適用されないかもしれません.
正規表現を使ってURLアドレスからファイル名を抽出しなければならないjavascriptプログラムは、以下の結果がpage 1です.
s="http://blog.penner.cn/page1.htm"
s=s.replace(/(.*\/){ 0, }([^\.]+).*/ig,"$2")
alert(s)
正規表現を使用して、ウェブフォーム内のテキスト枠の入力内容を制限します.正規表現での制限は中国語のみです.
onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
正規表現での制限は全角文字しか入力できません.onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
正規表現で制限すると数字だけ入力できます.onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
正規表現で制限すると、数字と英語のみ入力できます.onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
非負の整数を整合する(正の整数+0)^\d+$
正の整数を満たす^[0-9]*[1-9][0-9]*$
非正の整数と一致する(負の整数+0)^((-\d+)|(0+))$
負の整数を満たす^-[0-9]*[1-9][0-9]*$
マッチング整数^-?\d+$
非負浮動小数点(正浮動小数点+0)にマッチします.^\d+(\.\d+)?$
正浮動小数点を合わせる^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
マッチング非正浮動小数点(負浮動小数点+0)^((-\d+(\.\d+)?)|(0+(\.0+)?))$
マッチング負浮動小数点^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
マッチング浮動小数点 ^(-?\d+)(\.\d+)?$
26文字のアルファベットからなる文字列をマッチさせます.^[A-Za-z]+$
26文字の大文字で構成される文字列にマッチします.^[A-Z]+$
26文字の小文字からなる文字列をマッチさせます.^[a-z]+$
数字と26文字のアルファベットからなる文字列をマッチさせます.^[A-Za-z0-9]+$
数字、26文字、またはアンダースコアからなる文字列をマッチさせます.^\w+$
メールアドレスにマッチ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
マッチングコース^[a-zA-z]+:// (\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$
マッチ<\s*(\S+)(\s[^>]*)?>(.*?)<\s*\/\1\s*>