js の正規表現 (1)

伊谢尔伦
伊谢尔伦オリジナル
2016-11-22 14:34:18975ブラウズ

文字の意味は意味の変更として使用されます。つまり、「」の後の文字は通常、元の意味に従って解釈されません。たとえば、前にバックスラッシュが追加された場合、/b/ は文字「b」と一致します。 b、/b/ の意味の変化は、単語の境界に一致することです。 -または- 正規表現関数文字の復元。たとえば、「*」がその前のメタ文字に 0 回以上一致します。/a*/ は a、aa、aaa に一致します。「」を追加した後は、/a*/ は「」にのみ一致します。あ*」。 ^ は入力または行の先頭に一致します。 /^a/ は "an A" に一致しますが、"An a" には一致しません。 $ は入力または行の末尾に一致します。 /a$/ は "An a" に一致します。ただし、「an A」とは一致しません。* 先行するメタキャラクターに 0 回以上一致します。 /ba*/ は b、ba、baa、baaa に一致します。 + 先行するメタキャラクターに 1 回以上一致します。 /ba*/ は、ba、baa に一致します。 、baaa? は先行するメタ文字に 0 回または 1 回一致します、/ba*/ は b に一致します、ba(x) は x に一致します、x を $1...$9 という名前の変数に保存します、x|y は x または y{n に一致します} 正確に n 回一致します { n,} は n 回以上一致します {n,m} は n-m 回一致します [xyz] 文字セット (文字セット)、このセット内の任意の文字 (またはメタ文字) と一致します [^xyz] は一致しませんこのセット内の任意の文字 任意の文字 [b] はバックスペースと一致します b は単語境界と一致します B は非単語境界と一致します cX ここで、X は制御文字、/cM/ は Ctrl-Md と一致します、英数字と一致します、/d/ = / [0-9]/D は英数字以外の文字に一致します。 /D/ = /[^0-9]/n は改行文字に一致します。 r は復帰文字に一致します。 s は n、r、f を含む空白文字に一致します。 、 t 、 v およびその他の S は、 /[^nfrtv]/ に等しい非空白文字に一致します。 t はタブ文字に一致します。 v は直接タブ文字に一致します。 w は単語を構成できる文字に一致します (英数字、これは私のものです)自由翻訳 (数字を含む)、アンダースコアを含む ([w] は "$5.98" の 5 に一致します。[a-zA-Z0-9] と同等です) W は単語を形成できない文字に一致します。たとえば、[W] に一致します。 "$5.98" の $、[^a-zA-Z0-9] に等しい。

re = new RegExp("pattern",["flags"]) を使用することをお勧めします
pattern: 正規表現
flags: g (全文に出現するすべてのパターンを検索)
i (大文字と小文字を無視)
m (複数行検索) JavaScript の動的正規表現の質問です。正規表現は動的に生成できますか?
たとえば、JavaScript では:
var str = "strTemp";
生成するには:
var re = /strTemp/;
の場合文字の接続:
var re = "/" + str + "/" だけで十分です
しかし、式を生成するには、どのように実装すればよいでしょうか?

正規表現は、文字パターンを記述するオブジェクトです。
JavaScript の RegExp オブジェクトと String オブジェクトは、正規表現を使用して強力なパターン マッチング、テキストの取得および置換機能を実行するためのメソッドを定義します。


もちろん、JavaScript では、正規表現は RegExp オブジェクトで表すことができます。 RegExp() コンストラクターを使用して作成することも、JavaScript 1.2 で新たに追加された特殊な構文を使用して RegExp オブジェクトを作成することもできます。文字列リテラルが引用符で囲まれた文字として定義されるのと同様に、
正規表現リテラルも含まれる文字として定義されます。したがって、JavaScript には次のコードが含まれる可能性があります:

var pattern = /s$/;

このコード行は、新しい RegExp オブジェクトを作成し、それをこの特別な RegExp 変数に割り当てます。 object は文字「s」で終わるすべての文字列に一致します。次のようにコードを記述して RegExp() を使用して同等の正規表現を定義することもできます。


var pattern = new RegExp("s$");

正規表現を使用するかどうか式リテラルまたはコンストラクター RegExp() を使用して RegExp オブジェクトを作成することは比較的簡単ですが、より難しい作業は、正規表現構文を使用して文字パターンを記述することです

JavaScript は、Perl 言語の正規表現構文のかなり完全なサブセットを使用します


正規表現のパターン仕様は一連の文字で構成されます。ほとんどの文字 (すべての英数字を含む) は文字通り一致する文字を表します。このように、正規表現 /java/ は部分文字列 " を含むすべての文字列と一致します。 java"。正規表現内の他の文字列は文字どおりには一致しませんが、すべて特別な意味を持っています。正規表現 /s$/ には 2 つの文字が含まれています。

最初の特殊文字「s」は文字通りそれ自体と一致します。2 番目の文字は文字「$」は文字列の末尾に一致する特殊文字です。したがって、正規表現 /s$/ は文字「s」で終わる文字列


と一致することがわかりました。正規表現内の文字と数字は、文字どおりに一致します。JavaScript 正規表現は、バックスラッシュ () で始まるいくつかの非
エスケープ シーケンスもサポートしています。たとえば、シーケンス「n」は、正規の文字列内のリテラル改行文字と一致します。式の多くの句読点には特別な意味があります。これらの文字とその意味は次のとおりです:

式の通常のリテラル文字

文字マッチング
______________________________
英数字そのもの
f フォームフィード
n 改行
r キャリッジリターン
t タブ
v 垂直タブ
/ a / 直接数量
直接数量
* a * 直接数量
+ a + 直接量
? a ? 直接量
| ( a (直接量
) a ) 直接量
{ a { リテラル
} a } リテラル
XXX 10 進数 XXX で指定される ASCII コード文字
cJ は n と同等です

_______________________________________________

正規表現で特殊な句読点を使用したい場合は、それらの前に「」を追加する必要があります。

文字class

個々の直接文字を角括弧で囲みます。文字クラスは、正規表現 / [abc] / と文字 "a"、"b" のいずれか 1 つと一致するように、文字クラスに組み合わせることができます。 、 "c"

一致 さらに、角括弧内に含まれる文字を除くすべての文字に一致する負の文字クラスを定義できます。負の文字チップを定義する場合は、左角括弧の最初の文字として ^ 記号を使用します。

文字。正規表現のセットは /[a-zA-z0-9]/ です。

特定の文字クラスが非常に一般的に使用されるため、JavaScript の正規表現構文には、これらの一般的に使用されるクラスを表すいくつかの特殊文字とエスケープ シーケンスが含まれています。たとえば、 s はスペース、タブ、その他の空白文字と一致し、 s

は空白文字を除く任意の文字と一致します。 ..] 括弧内にない任意の文字
。 改行を除く任意の文字 ([^n]
w と同等) 任意の 1 文字 ([a-zA-Z0-9]

W と同等) 単一以外の文字 ([ と同等) ^a-zA-Z0-9]

s [t n r f v] に相当する任意の空白文字
S [^ t n r f v] に相当する任意の非空白記号

d [0-9] に相当する任意の数値

D 任意の文字数値以外の [^0-9]

[b] バックスペース リテラル (特殊な場合)

_____________________________________________________________

3. コピー

上記の正規表現構文を使用すると、2 桁の数値は / d d / のように記述できます。 、4 桁の数値は / d d d / と記述できますが、任意の桁数の数値または

文字列を記述する方法がまだありません。文字列は 3 つの文字とそれに続く数字で構成されます。これらの複雑なパターンは、正規表現構文を使用して各要素を繰り返す回数を指定します。

特定のコピー タイプは、それらが適用されるパターンの後に表示されます。共通ですが、それらを表すために特別に使用される特殊文字がいくつかあります。例: + 記号 一致するのは、前のパターンを 1 回または複数回コピーするパターンです。最初に、コピー構文のリストを示します。 :

/d{2, 4}/ //2 から 4 までの数字と一致します。

/w{3} d?/ //3 つの単一文字と任意の数字と一致します。

/s+javas+/ //文字列「java」と一致します。文字列の前後に 1 つ以上のスペースがあっても構いません .

/[^"] * / // 0 個以上の非引用符文字と一致します。

正規表現の文字をコピーします

文字の意味

____________________________________________________________________________

{n, m} は前の項目と少なくとも n 回一致しますが、m 回を超えることはできません

{n, } 前の項目と n 回または複数回一致します

{n} 前の項目と正確に n 回一致します回

? 前の項目と 0 回または 1 回一致します。つまり、前の項目はオプションです。{0, 1}

+ は前の項目と 1 回以上一致します。{1,}

* と一致します。前の項目を 0 回以上、{0,} と同等です。

____________________________________________________________

4. 選択、グループ化、および参照

正規表現の構文には、選択の指定、部分式のグループ化、および前の部分式の参照のための特殊文字も含まれます。たとえば、/ab|cd|ef/ は文字列「ab」、文字列「cd」、または「ef」に一致します。 / は 3 桁の数字または 4 つの小文字に一致します。括弧には正規表現のいくつかの機能があります。その主な機能は、*、+、またはを使用して、個々の項目を部分式にグループ化することです。 ? それらの項目を処理する場合: /java(script) ?/ 文字列 "java" に一致し、その後に "script" が続くかどうか / 文字列 "ef" のいずれかに一致します。 " または文字列 "ab" または "cd" の 1 つ以上の繰り返し。

正規表現における括弧の 2 番目の使用は、完全なスキーマ内のサブパターンを定義することです。正規表現がターゲット文字列と正常に一致すると、その正規表現をターゲット文字列から抽出してかっこ内のサブパターンと一致させることができます
たとえば、取得するパターンが 1 つ以上の文字とそれに続く 1 つ以上の数字であると仮定すると、パターン /[a-z]+d+/ を使用できます。 about はそれぞれ

の末尾の数字と一致し、パターンの数字部分を括弧 (/ [a-z] + (d+)/) で囲むと、取得された一致から数字を抽出できます。この解析された .

の括弧で囲まれた部分式の別の使用法は、同じ正規表現の後で前の部分式を参照できるようにすることです。これは、文字列の後に 1 つ以上の数字を追加することによって行われます。正規表現内の括弧の部分式

例: 1 は最初の括弧の部分式を指します。

部分式は他の部分式内にネストできることに注意してください。そのため、その位置はカウントされた左括弧の位置になります。

たとえば、次の正規表現では 2 として指定されます:
/ ([Jj]ava([Ss]cript)) sis s (funw*) /

正規表現内の前の部分表現への参照は、その部分表現のパターンを指定するのではなく、その部分表現に関連するパターンを指定します。このように、引用符は、正規表現の繰り返し部分を入力するための単なるショートカットではありません。また、文字列の別々の部分にまったく同じ文字が含まれるという規則も適用されます。例: 次の正規表現は、一重引用符または二重引用符内のすべての文字に一致します (たとえば、両方が一致している必要があります)。二重引用符、または両方が単一引用符です ):

/[' "] [^ ' "]*[' "]/

開始引用符と終了引用符が一致する必要がある場合は、次の引用符を使用できます:

/( [' "] ) [^ ' "] * 1/


1 は、最初の括弧の部分式と一致するパターンに一致します。この例では、開始引用符が終了引用符と一致する必要があるという規則を実装しています。バックスラッシュの後に

括弧部分式よりも多くの数字が続く場合、参照ではなく 10 進数のエスケープ シーケンスとして解析されます。これにより、たとえば、完全な 3 文字のエスケープ シーケンスを使用できます。 、

使用

有关正则表达式的语法还有最后一个元素,那就是正则表达式的属性,它说明的是高级模式匹配的规则.和其它正则表达式语法不同,属性是在 / 符号之外说明的.即它

们不出现在两个斜杠之间,而是位于第二个斜杠之后.javascript 1.2支持两个属性.属性 i 说明模式匹配应该是大小写不敏感的.属性 g 说明模式匹配应该是全局的.也

就是说,应该找出被检索的字符串中所有的匹配.这两种属性联合起来就可以执行一个全局的,大小写不敏感的匹配.

例如: 要执行一个大小不敏感的检索以找到词语 "java" (或者是 "java" 、"JAVA"等) 的第一个具体值,我们可以使用大小不敏感的正则表达式 /\b java\b/i .如果要在

一个字符串中找到 "java" 所有的具体值,我们还可以添加属性 g, 即 /\b java \b/gi .

以下是正则表达式的属性:

字符 含义
_________________________________________
i 执行大小写不敏感的匹配
g 执行一个全局的匹配,简而言之,就是找到所有的匹配,而不是在找到第一个之后就停止了
_________________________________________

除属性 g 和 i 之外,正则表达式就没有其它像属性一样的特性了.如果将构造函数 RegExp 的静态属性 multiline 设置为 true ,那么模式匹配将以多行的模式进行.在这

种模式下,锚字符 ^ 和 $ 匹配的不只是检索字符串的开头和结尾,还匹配检索字符串内部的一行的开头和结尾.例如: 模式 /Java$/ 匹配的是 "Java",但是并不匹配

"Java\nis fun" .如果我们设置了 multiline 属性,那么后者也将被匹配:

RegExp.multiline = true;在JAVASCRIPT里面判断一个字符串是否是电子邮件的格式:if(formname.email.value!=formname.email.value.match(/^\w +[@]\w +[.][\w.] +$/)){alert("您的电子邮件格式错误!");formname.email.focus();return false;}    

[RED]function dateVerify(date){
var reg = /^(\d{4})(-)(\d{2})\2(\d{2})$/;
var r = date.match(reg);
if(r==null) return false;
var d= new Date(r[1], r[3]-1,r[4]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate();
date=r[1]+r[2]+((r[3]-1)+1)+r[2]+((r[4]-1)+1);
return newStr==date;
}[/RED]

javascript的17种正则表达式

"^\\d+$"  //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$"  //正整数
"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$"  //负整数
"^-?\\d+$"    //整数
"^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 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+)?)|(0+(\\.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+)?$"  //浮点数
"^[A-Za-z]+$"  //由26个英文字母组成的字符串
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串
"^[a-z]+$"  //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
"^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //ur

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:js の正規表現 (2)次の記事:js の正規表現 (2)