摘要:本文主要总结了JS中字符串和数组的操作函数和使用方法,并提供了几个实现字符串链表操作的函数,大家可以直接使用。
随便搜索一下也许就能找到一些关于 JS 的简单知识,所以本文首先重点介绍 JavaScript 字段中链表元素的搜索和替换(指搜索和替换每个元素的内容),然后介绍使用JS。 字符串和字段的基本操作。
1. 搜索并替换JavaScript(字符串)链表中每个元素的内容。
JavaScript提供了在字符串中查找子字符串的函数indexOf()、lastIndexOf()和search(),还提供了字符串替换函数replace(),但链表对象Array中没有实现该函数。
为了让Array也支持上述方法,我们可以改变Array对象的原型,减少相应的函数。 让这个函数与String对象的函数具有相同的名称和相似的句型,以方便我们的使用。 下面给出一些简单的介绍,读者也可以根据自己的需要定义其他的方法。
//判断一个字符串是否包含另一个字符串,substr:子字符串,start:起始位置
Array.prototype.indexOf=函数(substr,start){
varta,rt,d='';
if(start!=null){ta=this.slice(start);rt=start;}else{ta=this;rt=0;}
varstr=d+ta.join(d)+d,t=str.indexOf(d+substr+d);
if(t==-1)return-1;rt+=str.slice(0,t).replace(/[^]/g,'').length;
返回;
//该方法从右向左搜索,返回strObj中substr最后出现的位置。 如果没有找到,则返回-1。
Array.prototype.lastIndexOf=函数(substr,开始){
varta,rt,d='';
if(start!=null){ta=this.slice(start);rt=start;}else{ta=this;rt=0;}
ta=ta.reverse();varstr=d+ta.join(d)+d,t=str.indexOf(d+substr+d);
if(t==-1)return-1;rt+=str.slice(t).replace(/[^]/g,'').length-2;
返回;
//该方法将字符串中的reg替换为rpby,比较常用。
Array.prototype.replace=函数(reg,rpby){
varta=this.slice(0),d='';
varstr=ta.join(d);str=str.replace(reg,rpby);
returnstr.split(d);
//查找字符串中指定的子串
Array.prototype.search=函数(reg){
varta=this.slice(0),d='',str=d+ta.join(d)+d,regstr=reg.toString();
reg=newRegExp(regstr.replace(//((.|n)+)/.*/g,'\0$1\0'),regstr.slice(regstr.lastIndexOf('/') +1));
t=str.search(reg);if(t==-1)return-1;returnstr.slice(0,t).replace(/[^]/g,'').length;
以上四种方法都实现了链表中每个元素的查找或者替换,不用再做循环浪费时间。
2.js对字符串的操作。
1. 字符串的创建
创建字符串的方法有多种。 最简单的是使用冒号包含一组字符,并且可以将其形式参数赋予字符串变量。
varmyStr="你好,字符串!";
我们在脚本中创建字符串,但本质上,它们并不是真正的字符串对象,而是字符串类型的值。 要创建字符串对象,请使用以下句子: varstrObj=newString("Hello,String!");
如果使用typeof运算符查看javascript 数组 转换 字符串,会发现myStr类型是string,strObj类型是object。
如果您想知道字符串的宽度,请使用其长度属性:string.length。
如何获取字符串指定位置的字符:string.charAt(index);
2. 字符串连接
很简单,只需使用“+”将两个字符串“相乘”即可:
varlongString="Onepiece"+"plusonemorepiece.";
要将多个字符串累积为一个字符串,还可以使用“+=”运算符:
varresult="";
结果+=“我的名字安德斯”
结果+=“andmyageis25”;
要向字符串添加换行符,请使用通配符“n”:
varconfirmString="您没有输入最后的响应"+
“问题。nn是否仍要提交?”;
varconfirmValue=确认(confirmString);
然而,这些方法只能用于警告和确认对话框等情况。 如果此文本以 HTML 内容呈现,则该文本无效。 在这种情况下,请使用“
“将其替换为:
varhtmlString =“第一行字符串。
第二行字符串。";
文档.write(htmlString);
String对象还提供了concat()方法,它执行与“+”相同的功能:
string.concat(值1,值2,...)
然而,concat()方法似乎并不像“+”那么直观和简单。
3. 访问字符串的子串
使用 substring() 或 slice() 方法(NN4+、IE4+),它们的具体用法解释如下。
substring() 的原型是: string.substring(from,to)
第一个参数from指定子串在原字符串中的起始位置(基于0索引); 第二个参数to是可选的,它指定子字符串在原始字符串中的结束位置(从0开始)。 index),通常应该大于 from。 如果省略,子字符串仍将到达原始字符串的末尾。
如果参数 from 意外大于参数 to 会发生什么情况? JavaScript 会手动调整子字符串的起始和结束位置,即 substring() 总是从两个参数中较小的一个开始,以较大的一个结束。 但请注意,它包含起始位置的字符,但不包含结束位置的字符。
varfullString="Everydoghashisday.";
varsection=fullString.substring(0,4);//section是“Ever”。
slice() 的原型是: string.slice(start,end)
参数start表示子串的起始位置。 如果是正数,可以理解为从最后一个到最后一个的起始位置。 例如-3表示从倒数第三个开始。 参数end表示结束位置。 和start一样,它也可以是正数也表示倒数第二个数的结束。 slice()的参数可以是正数,因此比substring()更灵活,但宽容度不够。 如果start大于end,则返回空字符串(示例略)。
另一种方式是substr(),其原型为:string.substr(start,length)
从原型中可以看出其参数的含义。 start表示起始位置,length表示子串的粗细。 JavaScript 标准不鼓励使用这种技术。
4.字符串大小写转换
使用 toLowerCase() 和 toUpperCase() 方法:
varcity="上海";
city=city.toLowerCase();//现在城市是“上海”。
5.判断两个字符串是否相等
首先将所有用户输入的值转换为小写(或大写),然后进行比较:
varname=document.form1.txtUserName.value.toLowerCase();
if(姓名==“姓氏”)
// 语句移至此处。
JavaScript 有两个相等运算符。 一种是完全向后兼容,标准的“==”。 如果两个操作数类型不一致,它会在某些时候手动对操作数进行类型转换。 考虑以下形式参数语句:
varstrA="我爱你!";
varstrB=newString("我爱你!");
这两个变量包含相同的字符序列,但具有不同的数据类型。 后者是字符串,前者是对象。 当使用“==”运算符时,JavaScript 将尝试各种评估来检查两个变量是否彼此匹配。 在某些情况下是平等的。 因此以下表达式的计算结果为 true:strA==strB。
第二个运算符是“严格”“= =”,它的计算不太宽容javascript 数组 转换 字符串,并且不执行类型转换。 因此,表达式 strA===strB 的计算结果为 false,即使这两个变量具有相同的值。
有时代码的逻辑要求你判断两个值是否不相等。 这里有两个选项:“!=”和严格的“!==”。 他们的关系类似于“==”和“===”。
讨论:
“==”和“!=”在求值时会尽力找到匹配的值,但您可能仍然希望在比较之前执行显式类型转换以“帮助”它们完成工作。 例如,如果你想判断用户输入的值(字符串)是否等于数字,你可以让“==”为你完成类型转换:
if(document.form1.txtAge.value==someNumericVar){...}
也可以提前转换:
if(parseInt(document.form1.txtAge.value)==someNumericVar){...}
如果你比较习惯强类型编程语言(比如C#、Java等),可以在这里延续你的习惯(类型转换),这样也会提高程序的可读性。
您需要注意的一件事是计算机的区域设置。 如果使用“”来比较字符串,那么 JavaScript 会将它们作为 Unicode 进行比较,但事实上,人们在浏览网页时不会将文本读取为 Unicode 🙂 例如,在爱尔兰语中,根据传统的排序,“ch”将被排序为“c”和“d”之间的一个字符。 localeCompare() 提供了一个方法来帮助您使用默认语言环境的字符排序规则。
varstrings;//要排序的字符串字段,假设已经初始化
strings.sort(function(a,b){returna.localeCompare(b)});//调用sort()进行排序
6. 搜索字符串
使用字符串的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似乎就派上用场了。 以下函数演示了如何查找一个字符串包含另一个字符串的次数:
函数countInstances(mainStr,subStr)
变量计数=0;
变量偏移=0;
做
offset=mainStr.indexOf(subStr,offset);
if(偏移量!=-1)
计数++;
offset+=subStr.length;
} while(偏移量!=-1)
返回计数;
String对象有对应indexOf()、lastIndexOf()的方法:
strObj.lastIndexOf(子字符串[,startindex])
strObj为要确定的字符串,subString为strObj中要查找的子字符串,startIndex为可选,表示查找的起始位置(从0开始索引),如果startIndex省略,则从strObj末尾开始查找,如果startIndex大于0,则从0开始。如果startIndex小于最大索引,则从最大索引开始。 该方法从右向左搜索并返回 subString 最后出现在 strObj 中的位置。 如果没有找到,则返回-1。
7. Unicode值和字符串中的字符之间的转换
问题:
获取字符的 Unicode 编码值,反之亦然。
解决方案:
要获取字符的Unicode编码,可以使用string.charCodeAt(index)方法,其定义为:
strObj.charCodeAt(索引)
index 是指定字符在 strObj 对象中的位置(从 0 开始的索引),返回值是 0 到 65535 之间的 16 位整数。如:
varstrObj="ABCDEFG";
varcode=strObj.charCodeAt(2);//字符'C'的Unicode值是67
如果index指定的索引处没有字符,则返回值为NaN。
要将 Unicode 编码转换为字符,请使用 String.fromCharCode() 方法。 注意,它是 String 对象的“静态方法”,这意味着使用前不需要创建字符串实例:
String.fromCharCode(c1,c2,...)
它接受0个或多个整数,并返回一个包含每个参数指定的字符的字符串,例如:
varstr=String.fromCharCode(72,101,108,108,111);//str=="你好"