JavaScript での文字列操作
1. 概要
ユーザー入力データを処理するとき、DOM オブジェクトの属性を読み取ったり設定したり、Cookie を操作したりするとき、文字列はほとんどどこでも使用されます。 JavaScript のコア部分は、文字列の分割、文字列の大文字と小文字の変更、部分文字列の操作など、一般的な文字列操作のためのプロパティとメソッドのセットを提供します。
現在のほとんどのブラウザでも、正規表現を使用すると多くの文字列操作タスクが大幅に簡素化されるため、正規表現の力の恩恵を受けることができますが、ある程度急な学習曲線を克服する必要もあります。ここでは、主に文字列自体に対するいくつかの操作を紹介します。正規表現については、今後のエッセイで説明します。
2. 文字列の作成
文字列を作成するにはいくつかの方法があります。最も簡単な方法は、一連の文字を引用符で囲むことです。これを文字列変数に割り当てることができます。
var myStr = "Hello, String!";
二重引用符または一重引用符を使用して文字列を含めることができますが、文字列を区切る引用符のペアは同じである必要があり、混合できないことに注意してください。
var myString = "Fluffy is a pretty cat.'; のようなステートメントは不正です。
2 種類の引用符の使用を許可し、一方を他方に埋め込むなどの特定の操作を単純にします:
document。 write("");
上記のスクリプトを作成しましたが、いくつかの文字列があります。本質的に、これらは実際の文字列オブジェクトではなく、文字列型の値です。文字列オブジェクトを作成するには、次のステートメントを使用します: var strObj = new String("Hello. , String!");
typeof 演算子を使用して確認すると、上記の myStr 型が string であり、strObj 型が object であることがわかります
文字列の長さを知りたい場合は、その長さ属性を使用します: string.length。
文字列の指定された位置にある文字を取得します。 使用法: string.charAt(index); String 解決策: 2 つの文字列を「追加」するために「+」を使用するだけです。 longString = "1 つの部分 " + "さらに 1 つの部分。";複数の文字列を 1 つの文字列にまとめるには、「+=」演算子を使用することもできます: var result = ""; result += "私の名前はアンダースです"result += "、私の年齢は 文字列に改行文字を追加するには、エスケープ文字 "n" を使用する必要があります: varconfirmString = "最後の " + "question.nnSubmit formとにかく?";varconfirmValue =confirm(confirmString); に対する回答を入力していませんが、このメソッドは次のような状況でのみ使用できます。このテキストが HTML として使用されている場合、コンテンツが表示されると無効になります: var htmlString = "文字列の最初の行。< ;br>文字列の 2 行目。";document.write (htmlString); String オブジェクトには、"+": 文字列と同じ機能を実行するメソッド concat() も提供されます。 concat(value1, value2, ...) しかし、concat() このメソッドは明らかに「+」ほど直感的で簡潔ではありません。 4. 文字列の部分文字列へのアクセス 質問: 文字列の一部のコピーを取得します。 解決策: substring() または slide() メソッド (NN4+、IE4+) を使用します。その具体的な使用法については以下で説明します。 substring() のプロトタイプは次のとおりです: string.substring(from, to) 最初のパラメーター from は、元の文字列内の部分文字列の開始位置を指定します (0 から始まるインデックス)。2 番目のパラメーター to はオプションです。元の文字列内の部分文字列の終了位置を指定します (0 から始まるインデックス)。これを省略した場合、部分文字列は元の文字列の末尾まで続きます。 パラメータ from が誤ってパラメータ to よりも大きい場合はどうなりますか? JavaScript は部分文字列の開始位置と終了位置を自動的に調整します。つまり、substring() は常に 2 つのパラメーターのうち小さい方から始まり、大きい方で終わります。ただし、開始位置の文字は含まれますが、終了位置の文字は含まれないことに注意してください。 var fullString = "どの犬にもその日があります。";var Section = fullString.substring(0, 4) // セクションは "Ever" です。
section = fullString.substring(4, 0); // セクションも「Ever」です。
section = fullString.substring(1, 1) // セクションは空の文字列です。 -2, 4); // セクションは fullString.substring(0, 4) と同じ "Ever" です。
スライス() のプロトタイプは次のとおりです: string.slice(start, end)
start 部分文字列の開始位置を示します。負の数の場合、-3 は最後から 3 番目から開始することを意味します。 start と同様に、負の数にすることもでき、その意味は最後から 2 番目の数の終わりを示します。 lice() のパラメータは負の値も指定できるため、substring() よりも柔軟性が高くなりますが、start が end よりも大きい場合は空の文字列が返されます (例は省略)。
もう 1 つのメソッドは substr() で、そのプロトタイプは次のとおりです: string.substr(start, length)
プロトタイプから、そのパラメーターの意味がわかります。 start は開始位置を表し、length は部分文字列の長さを表します。 。 JavaScript 標準では、このメソッドの使用は推奨されていません。
5. 文字列の大文字と小文字の変換
質問:
都市などのユーザーの入力情報を受け取るテキストボックスがあります。このとき、当然、都市に応じて異なる処理を実行します。比較が使用されるため、比較する前に大文字と小文字の変換を実行して、変換後の状況のみを考慮するか、ページ上のデータを収集してからデータベースにデータを保存することをお勧めします。たまたま大文字のみを受け取る場合があります。このような場合は、文字列の大文字と小文字の変換を考慮する必要があります。
解決策:
toLowerCase() メソッドと toUpperCase() メソッドを使用します:
var city = "Shanghai";
city = city.toLowerCase(); // city は現在 "shanghai" です。 6. 2 つの文字列が等しいかどうかを判断します
問題:
たとえば、ユーザーの入力値を既知の文字列と比較したい場合
解決策:
最初にすべてのユーザー入力値を大文字 (または小文字) に変換し、そして比較します:
var name = document.form1.txtUserName.value.toLowerCase();
if(name == "urname")
{
// ここにステートメントが入ります
}
JavaScript には 2 つの等価演算子があります。 1 つは完全な下位互換性のある標準の "==" です。2 つのオペランドの型が一致しない場合は、次の代入ステートメントを考慮してください。
var strA = "i love you!";
var strB = new String("i love you!");
これら 2 つの変数には同じ文字列が含まれていますが、データ型が異なります。前者は文字列、後者はオブジェクトです。 「==」演算子を使用すると、JavaScript はさまざまな評価を試みて、特定の状況下で 2 つが等しいかどうかを検出します。したがって、次の式は true と評価されます: strA == strB。
2 番目の演算子は「厳密」な「===」ですが、これは評価中にそれほど寛容ではなく、型変換を実行しません。したがって、両方の変数が同じ値を保持しているにもかかわらず、式 strA === strB は false と評価されます。
コードのロジックでは、2 つの値が等しくないかどうかを判断する必要がある場合があります。「!=」と厳密な「!==」の関係も同様です。 " と "===" "。
ディスカッション:
「==」と「!=」は、評価時に一致する値を見つけるために最善を尽くしますが、作業を「完了するのに役立つ」ために、比較する前に明示的な型変換を実行することもできます。たとえば、ユーザーの入力値 (文字列) が数値に等しいかどうかを判断したい場合、「==」を使用して型変換を完了できます:
if(document.form1.txtAge.value == someNumericVar ) { .. . }
事前に変換することもできます:
if(parseInt(document.form1.txtAge.value) == someNumericVar) { ... }
厳密に型指定されたプログラミング言語に慣れている場合(C#、Java など)、ここで習慣 (型変換) を続けることができ、プログラムの可読性も向上します。
注意する必要があることが 1 つあり、それはコンピューターの地域設定です。 「<」と「>」を使用して文字列を比較すると、JavaScript はそれらを Unicode として比較しますが、明らかに Web を閲覧している人はテキストを Unicode として読みません:) たとえば、スペイン語では、従来の並べ替えによれば、 ch」は、「c」と「d」の間の文字としてソートされます。 localeCompare() は、デフォルトのロケールの文字照合を使用する方法を提供します。
var strings; // 初期化されていると仮定して、ソートされる文字列配列
strings.sort(function(a,b) { return a.localeCompare(b) }); // sort() メソッドを呼び出して並べ替えます
7. 文字列の検索
質問:
判定文字列に別の文字列が含まれているかどうか。
解決策:
文字列のindexOf()メソッドを使用します:
strObj.indexOf(subString[, startIndex])
strObjは判定される文字列、subStringはstrObjで見つかる部分文字列、startIndexです。オプションで、検索の開始位置を示します (0 から始まるインデックス)。startIndex が省略された場合、検索は strObj から開始されます。startIndex が最大インデックスより大きい場合は、最大のインデックスから開始されます。
IndexOf() は、strObj 内の subString の開始位置を返します。見つからない場合は、-1 を返します。スクリプトでは、次のように使用できます:
if(largeString.indexOf(shortString) != -1)
別の文字列が複数回含まれる場合、2 番目のパラメータ startIndex が便利です。次の関数は、文字列に別の文字列が含まれる回数を見つける方法を示しています。 var count = 0, offset);
if(offset ! = -1) U {
Count ++;
Offset+= Substr.Length;
}} While (Office! = -1)
Return Count () 対応するメソッド、lastIndexOf():
strObj。 lastIndexOf(substring[, startindex])
strObjは判定対象の文字列、subStringはstrObj内の検索対象の部分文字列、startIndexはオプション、検索の開始位置を表します(startIndexが省略された場合は0から始まるインデックス)。の場合、検索は strObj の末尾から開始されます。startIndex が 0 未満の場合は 0 から開始されます。startIndex が最大インデックスより大きい場合は、最大インデックスから開始されます。このメソッドは右から左に検索し、strObj 内の最後の subString を返します。見つからない場合は、-1 を返します。
8. Unicode 値と文字列内の文字との間の変換
質問:
文字の Unicode エンコード値を取得し、その逆も同様です。
解決策:
文字の Unicode エンコーディングを取得するには、次のように定義される string.charCodeAt(index) メソッドを使用できます。
strObj.charCodeAt(index)
インデックスは、指定された文字の位置です。 strObj オブジェクト (インデックス 0 に基づく) では、戻り値は 0 ~ 65535 の 16 ビット整数です。例:
var strObj = "ABCDEFG";
var code = strObj.charCodeAt(2); // 文字「C」の Unicode 値は 67
指定されたインデックスに文字がない場合インデックスによる場合、戻り値は NaN になります。
Unicode エンコードを文字に変換するには、String.fromCharCode() メソッドを使用します。これは String オブジェクトの「静的メソッド」であるため、使用前に文字列インスタンスを作成する必要はありません。
String.fromCharCode(c1, c2, ...)
0 個以上の整数を受け入れ、各パラメータで指定された文字を含む文字列を返します。例:
var str = String.fromCharCode( 72 , 101, 108, 108, 111); // str == "Hello"
議論:
Unicode には世界中の多くの書き言葉の文字セットが含まれていますが、Unicode に含まれているからといってこれを期待しないでください。 1 文字 アラート ダイアログ、テキスト ボックス、またはページでレンダリングするときに文字が正しく表示されます。文字セットが使用できない場合は、ページ上に疑問符またはその他の記号として表示されます。一般的な北米のコンピュータでは、中国語の文字セットとそのフォントがインストールされていない限り、画面に中国語の文字を表示できません。