ホームページ > 記事 > ウェブフロントエンド > JavaScript での文字列操作
JavaScript での文字列操作
1. 概要
ユーザー入力データを処理するとき、DOM オブジェクトの属性を読み取ったり設定したり、Cookie を操作したりするとき、文字列はほとんどどこでも使用されます。 JavaScript のコア部分は、文字列の分割、文字列の大文字と小文字の変更、部分文字列の操作など、一般的な文字列操作のためのプロパティとメソッドのセットを提供します。
現在のほとんどのブラウザでも、正規表現を使用すると多くの文字列操作タスクが大幅に簡素化されるため、正規表現の力の恩恵を受けることができますが、ある程度急な学習曲線を克服する必要もあります。ここでは、主に文字列自体に対するいくつかの操作を紹介します。正規表現については、今後のエッセイで説明します。
2. 文字列の作成
文字列を作成するにはいくつかの方法があります。最も簡単な方法は、一連の文字を引用符で囲むことです。これを文字列変数に割り当てることができます。
var myStr = "Hello, String!";
二重引用符または一重引用符を使用して文字列を含めることができますが、文字列を区切る引用符のペアは同じである必要があり、混合できないことに注意してください。
var myString = "Fluffy is a pretty cat.'; のようなステートメントは不正です。
2 種類の引用符の使用を許可し、一方を他方に埋め込むなど、特定の操作を簡素化します:
document.write("<img src='img/logo.jpg' height='30' width='100' alt='Logo'>");
上記のスクリプトではいくつかの文字列を作成しましたが、本質的には、これらは実際の文字列オブジェクトではなく、文字列オブジェクトを作成するには、次のステートメントを使用します。 = new String("Hello, String!");
typeof 演算子を使用して、上記の myStr 型が string であり、strObj 型が object であることを確認します
文字列の長さを知りたい場合は、を使用します。長さ属性: string.length.
文字列の指定された位置にある文字を取得するメソッド: string.charAt(index); 1 つ以上の文字列を 1 つの大きな文字列に連結します
解決策:
を使用するだけです。 2 つの文字列を「追加」するには「+」:
var longString = "One piece " + "plus one more piece.";
複数の文字を連結するには 文字列は 1 つの文字列に累積されます。「+=」演算子も使用できます:
var result = ""; result += "My name is Anders" result += " and my age is 25";改行文字を追加するには文字列にエスケープ文字「n」を使用する必要があります:
var confirmString = "You did not enter a response to the last " + "question.\n\nSubmit form anyway?"; var confirmValue = confirm(confirmString);
ただし、このメソッドは警告や確認ダイアログ ボックスなどの状況でのみ使用できます。このテキストが HTML コンテンツとして表示される場合、無効になります。この場合、「0c6dc11e160d3b678d68754cc175188a」を使用して置き換えます:
var htmlString = "First line of string.<br>Second line of string."; document.write(htmlString);
String オブジェクト concat() メソッドも提供されており、「+」と同じ機能を実行します:
string.concat(value1, value2, ...)
ただし、concat( ) メソッドは明らかに "+" ほど直感的で簡潔ではありません
4. 文字列の部分文字列にアクセスする問題:
文字列の一部のコピーを取得します
解決策:
を使用します。 substring() またはスライス() メソッド (NN4+、IE4+) の具体的な使用法は以下で説明されています
substring() のプロトタイプは次のとおりです: string.substring(from, to)
最初のパラメータ from は、その開始位置を指定します。元の文字列内の部分文字列 (0 から始まるインデックス); 2 番目のパラメータ to はオプションで、サブ文字を指定します。 文字列は元の文字列の末尾にあります (0 から始まるインデックス)。省略すると、部分文字列は元の文字列の末尾に移動します。
パラメータ from が to パラメータより大きい場合はどうなりますか? JavaScript は部分文字列の開始位置と終了位置を自動的に調整します。つまり、substring() は常に 2 つのパラメーターのうち小さい方から始まり、大きい方で終わります。ただし、開始位置の文字は含まれますが、終了位置の文字は含まれないことに注意してください。
var fullString = "Every dog has his day."; var section = fullString.substring(0, 4); // section is "Ever". section = fullString.substring(4, 0); // section is also "Ever". section = fullString.substring(1, 1); // section is an empty string. section = fullString.substring(-2, 4); // section is "Ever", same as fullString.substring(0, 4);
lice() のプロトタイプは次のとおりです: string.slice(start, end)
パラメータ start は部分文字列の開始位置を表し、負の数の場合は、それからの開始位置として理解できます。たとえば、-3 は下から 3 番目から開始することを意味し、パラメータ end は 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 is "shanghai" now.
六、判断两个字符串是否相等
问题:
比如,你想拿用户的输入值与已知的字符串比较
解决方案:
先将用户的输入值全部转换为大写(或小写),然后再行比较:
var name = document.form1.txtUserName.value.toLowerCase(); if(name == "urname") { // statements go here. }
JavaScript有两种相等运算符。一种是完全向后兼容的,标准的"==",如果两个操作数类型不一致,它会在某些时候自动对操作数进行类型转换,考虑下面的赋值语句:
var strA = "i love you!"; var strB = new String("i love you!");
这两个变量含有相同的字符序列,但数据类型却不同,前者为string,后者为object,在使用"=="操作符时,JavaScript会尝试各种求值,以检测两者是否会在某种情况下相等。所以下面的表达式结果为true: strA == strB。
第二种操作符是"严格"的"===",它在求值时不会这么宽容,不会进行类型转换。所以表达式strA === strB的值为false,虽然两个变量持有的值相同。
有时代码的逻辑要求你判断两个值是否不相等,这里也有两个选择:"!="和严格的"!==",它们的关系就类似于"=="和"==="。
讨论:
"=="和"!="在求值时会尽可能地寻找值的匹配性,但你可能还是想在比较前进行显式的类型转换,以"帮助"它们完成工作。比如,如果想判断一个用户的输入值(字符串)是否等于一个数字,你可以让"=="帮你完成类型转换:
if(document.form1.txtAge.value == someNumericVar) { ... }
也可以提前转换:
if(parseInt(document.form1.txtAge.value) == someNumericVar) { ... }
如果你比较习惯于强类型的编程语言(比如C#,Java等),那么这里你可以延续你的习惯(类型转换),这样也会增强程序的可读性。
有一种情况需要注意,就是计算机的区域设置。如果用"33abac5f5e8ac9e2167dd683134404c5"来比较字符串,那么JavaScript把它们作为Unicode来比较,但显然,人们在浏览网页时不会把文本当作Unicode来阅读:)比如在西班牙语中,按照传统的排序,"ch"将作为一个字符排在"c"和"d"之间。localeCompare()提供了一种方式,可以帮助你使用默认区域设置下的字符排序规则。
var strings; // 要排序的字符串数组,假设已经得到初始化
strings.sort(function(a,b) { return a.localeCompare(b) }); // 调用sort()方法进行排序
七、字符串的查找
问题:
判断一个字符串是否包含另一个字符串。
解决方案:
使用string的indexOf()方法:
strObj.indexOf(subString[, startIndex])
strObj为要进行判断的字符串,subString为要在strObj查找的子字符串,startIndex是可选的,表示查找的开始位置(基于0的索引),如果startIndex省略,则从strObj开始处查找,如果startIndex小于0,则从0开始,如果startIndex大于最大索引,则从最大索引处开始。
indexOf()返回strObj中subString的开始位置,如果没有找到,则返回-1。在脚本中,可以这么使用:
if(largeString.indexOf(shortString) != -1) { // 如果包含,进行相应处理; }
也许一个字符串会包含另一字符串不止一次,这时第二个参数startIndex也许会派上用场,下面这个函数演示如何求得一个字符串包含另外一个字符串的次数:
function countInstances(mainStr, subStr) { var count = 0; var offset = 0; do { offset = mainStr.indexOf(subStr, offset); if(offset != -1) { count++; offset += subStr.length; } }while(offset != -1) return count; }
String对象有一个与indexOf()对应的方法,lastIndexOf():
strObj.lastIndexOf(substring[, startindex])
strObj为要进行判断的字符串,subString为要在strObj查找的子字符串,startIndex是可选的,表示查找的开始位置(基于0的索引),如果startIndex省略,则从strObj末尾处查找,如果startIndex小于0,则从0开始,如果startIndex大于最大索引,则从最大索引处开始。该方法自右向左查找,返回subString在strObj中最后出现的位置,如果没有找到,返回-1。
八、在Unicode值和字符串中的字符间转换
问题:
获得一个字符的Unicode编码值,反之亦然。
解决方案:
要获得字符的Unicode编码,可以使用string.charCodeAt(index)方法,其定义为:
strObj.charCodeAt(index)
index为指定字符在strObj对象中的位置(基于0的索引),返回值为0与65535之间的16位整数。例如:
var strObj = "ABCDEFG"; var code = strObj.charCodeAt(2); // Unicode value of character 'C' is 67
如果index指定的索引处没有字符,则返回值为NaN。
要将Unicode编码转换为一个字符,使用String.fromCharCode()方法,注意它是String对象的一个"静态方法",也就是说在使用前不需要创建字符串实例:
String.fromCharCode(c1, c2, ...)
它接受0个或多个整数,返回一个字符串,该字符串包含了各参数指定的字符,例如:
var str = String.fromCharCode(72, 101, 108, 108, 111); // str == "Hello"
讨论:
Unicode包含了这个世界上很多书写语言的字符集,但别因为Unicode包含一个字符就期望这个字符能够在警告对话框、文本框或页面呈现时正常显示。如果字符集不可用,在页面将显示为问号或其它符号。一台典型的北美的计算机将不能在屏幕上显示中文字符,除非中文的字符集及其字体已经安装。
以上就是JavaScript中的字符串操作的内容,更多相关内容请关注PHP中文网(www.php.cn)!