JavaScript의 문자열 작업
1. 개요
문자열은 사용자 입력 데이터를 처리할 때, DOM을 읽거나 설정할 때, 객체 속성을 조작할 때 거의 모든 곳에 있습니다. 쿠키, 그리고 물론 훨씬 더 많은 것들이 있습니다… JavaScript의 핵심 부분은 문자열 분할, 문자열 대소문자 변경, 하위 문자열 작업 등과 같은 일반적인 문자열 작업을 위한 속성 및 메서드 집합을 제공합니다.
대부분의 최신 브라우저는 정규 표현식의 강력한 이점을 활용할 수도 있습니다. 정규 표현식을 사용하면 수많은 문자열 조작 작업이 크게 단순화되지만 다소 가파른 학습 곡선을 극복해야 하기 때문입니다. 여기서는 주로 문자열 자체에 대한 몇 가지 작업을 소개합니다. 정규식은 향후 에세이에서 다루겠습니다.
2. 문자열 생성
문자열을 생성하는 방법에는 여러 가지가 있습니다. 가장 간단한 방법은 문자열 변수에 할당할 수 있는 문자 집합을 따옴표로 묶는 것입니다.
var myStr = "Hello, String!";
큰따옴표나 작은따옴표를 사용하여 문자열을 묶을 수 있지만 문자열을 구분하는 따옴표 쌍은 동일해야 하며 혼합할 수 없다는 점에 유의하세요.
var myString = "Fluffy is a Pretty cat.';과 같은 문은 불법입니다.
두 종류의 따옴표 사용을 허용하여 다음과 같은 특정 작업을 간단하게 만듭니다. 하나를 다른 문자열에 포함:
document.write("<img src='img/logo.jpg' height='30' width='100' alt='Logo'>");
위 스크립트에서 여러 문자열을 생성했지만 본질적으로 실제 문자열 개체는 아닙니다. 정확하게 말하면 문자열 객체를 생성하려면 다음 명령문을 사용할 수 있습니다. var strObj = new String("Hello, String!");
typeof 연산자를 사용하면 위의 myStr 유형은 문자열이고 strObj 유형은 객체입니다.
문자열의 길이를 알고 싶다면 해당 길이 속성인 string.length를 사용하세요. 🎜>
문자열의 지정된 위치에서 문자를 가져오는 방법: string.charAt(index); 3. 문자열 연결 문제: 두 개 이상의 문자열을 하나의 큰 문자열로 연결 해결책: 매우 간단합니다. "+"를 사용하여 두 문자열을 결합하기만 하면 됩니다. "추가":var longString = "One piece " + "plus one more piece.";
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. 문자열의 하위 문자열에 액세스
문제:
문자열 일부의 복사본을 얻습니다. 🎜>해결 방법:
하위 문자열()을 사용합니다. 또는 Slice() 메소드(NN4+, IE4+). 구체적인 사용법은 아래에 설명되어 있습니다.
substring()의 프로토타입은 string.substring(.from, to)
첫 번째 매개변수입니다. from은 원래 문자열의 하위 문자열 시작 위치를 지정합니다(0 기반 인덱스). 두 번째 매개 변수 to는 선택 사항이며 문자열이 원래 문자열의 끝에 있음을 지정합니다(0 기반 인덱스). from보다 커야 합니다. 생략되면 하위 문자열은 원래 문자열의 끝으로 이동합니다.
실수로 from 매개변수가 to 매개변수보다 커지면 어떻게 되나요? JavaScript는 하위 문자열의 시작 및 끝 위치를 자동으로 조정합니다. 즉, substring()은 항상 두 매개변수 중 더 작은 매개변수에서 시작하여 더 큰 매개변수로 끝납니다. 그러나 시작 위치의 문자는 포함되지만 끝 위치의 문자는 포함되지 않습니다.
Slice()의 프로토타입은 string.slice(start, end) 매개변수 start는 하위 문자열의 시작 위치를 나타냅니다. 는 음수입니다. 그러면 아래에서 처음까지의 숫자로 이해될 수 있습니다. 예를 들어 -3은 아래에서 세 번째부터 시작함을 의미합니다. 매개변수 end는 시작과 마찬가지로 끝 위치를 나타냅니다. 숫자이며 그 의미는 아래에서 끝까지의 숫자를 나타냅니다. Slice()의 매개변수는 음수일 수 있으므로 substring()보다 더 유연하지만 덜 허용됩니다. start가 end보다 크면 빈 문자열이 반환됩니다(예는 생략됨).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);
또 다른 메소드는 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)!