JavaScript(5):字符串



一、JavaScript 字符串

字符串可以存储一系列字符,如 "John Doe"。

字符串可以是插入到引号中的任何字符。你可以使用单引号或双引号:

var carname = "Volvo XC60";
var carname = 'Volvo XC60';

你可以使用索引位置来访问字符串中的每个字符:字符串的索引从 0 开始,这意味着第一个字符索引值为 [0],第二个为 [1], 以此类推。

var character = carname[7];

你可以在字符串中使用引号,字符串中的引号不要与字符串的引号相同:

var answer = "It's alright";
var answer = "He is called 'Johnny'";
var answer = 'He is called "Johnny"';

1、特殊字符

在 JavaScript 中,字符串写在单引号或双引号中。可以使用反斜杠 (\) 来转义 "Vikings" 字符串中的双引号,如下:

"We are the so-called \"Vikings\" from the north."

反斜杠是一个转义字符。 转义字符将特殊字符转换为字符串字符:

转义字符 (\) 可以用于转义撇号,换行,引号,等其他特殊字符。

下表中列举了在字符串中可以使用转义字符转义的特殊字符:

  • \' :单引号
  • \":双引号
  • \\:反斜杠
  • \n:换行
  • \r:回车
  • \t:tab(制表符)
  • \b:退格符
  • \f:换页符

2、字符串可以是对象

通常, JavaScript 字符串是原始值,可以使用字符创建: var firstName = "John"

但我们也可以使用 new 关键字将字符串定义为一个对象: var firstName = new String("John")

var x = "John";
var y = new String("John");
typeof x // 返回 String
typeof y // 返回 Object

注意:不要创建 String 对象。它会拖慢执行速度,并可能产生其他副作用:

var x = "John";             
var y = new String("John");
(x === y) // 结果为 false,因为 x 是字符串,y 是对象

=== 为绝对相等,即数据类型与值都必须相等。

二、字符串属性

length:返回字符串的长度

可以使用内置属性 length 来计算字符串的长度:

var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = txt.length;

三、字符串方法

1、charAt():返回指定索引位置的字符

stringObject.charAt(index)
var str="Hello world!"
document.write(str.charAt(1)) //e

2、charCodeAt():返回指定索引位置字符的 Unicode 值

stringObject.charCodeAt(index)
var str="Hello world!"
document.write(str.charCodeAt(1)) //101

3、fromCharCode():将 Unicode 转换为字符串

String.fromCharCode(numX,numX,...,numX)
document.write(String.fromCharCode(72,69,76,76,79)) //HELLO

4、concat():连接两个或多个字符串,返回连接后的字符串

提示:请注意,使用 " + " 运算符来进行字符串的连接运算通常会更简便一些。

var str1="Hello "
var str2="world!"
document.write(str1.concat(str2)) //Hello world!

5、localeCompare():用本地特定的顺序来比较两个字符串

我们将用本地特定排序规则对字符串数组进行排序:

var str;
str.sort (function(a,b){return a.localeCompare(b)})

6、slice():提取字符串的片断,并在新的字符串中返回被提取的部分

stringObject.slice(start,end)

返回一个新的字符串。包括字符串 stringObject 从 start 开始(包括 start)到 end 结束(不包括 end)为止的所有字符。

String 对象的方法 slice()、substring() 都可返回字符串的指定部分。slice() 比 substring() 要灵活一些,因为它允许使用负数作为参数。

还要注意的是,String.slice() 与 Array.slice() 相似。

我们将提取从位置 6 到位置 11 的所有字符:

var str="Hello happy world!"
document.write(str.slice(6,11)) //happy

7、substr():从起始索引号提取字符串中指定数目的字符(不推荐使用)

stringObject.substr(start,length)

注释:substr() 的参数指定的是子串的开始位置和长度,因此它可以替代 substring() 和 slice() 来使用。

var str="Hello world!"
document.write(str.substr(3,7))//lo worl

8、substring():提取字符串中两个指定的索引号之间的字符

stringObject.substring(start,stop)

substring() 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符。

如果参数 startstop 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。如果 startstop 大,那么该方法在提取子串之前会先交换这两个参数。

重要事项:与 slice()substr() 方法不同的是,substring() 不接受负的参数。

var str="Hello world!"
document.write(str.substring(3,7)) //lo w

9、indexOf() /lastIndexOf():返回字符串中检索指定字符最后一次出现的位置在字符串中查找字符串

字符串使用 indexOf() 来定位字符串中某一个指定的字符首次出现的位置。

lastIndexOf() 方法在字符串末尾开始查找字符串出现的位置。

如果没找到对应的字符函数返回-1

ar str="Hello world, welcome to the universe.";
var n=str.indexOf("welcome");

10、match():可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

stringObject.match(searchvalue)
stringObject.match(regexp)

match()函数用来查找字符串中特定的字符,并且如果找到的话,则返回这个字符。

match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。

  • 如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。
  • 如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。
var str="Hello world!";
document.write(str.match("world") + "
"); document.write(str.match("world!"));

使用全局匹配的正则表达式来检索字符串中的所有数字:

var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g)) //1,2,3

11、replace() :替换与正则表达式匹配的子串

stringObject.replace(regexp/substr,replacement)

字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

  • $1、$2、...、$99:与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
  • $&:与 regexp 相匹配的子串。
  • $`:位于匹配子串左侧的文本。
  • $':位于匹配子串右侧的文本。
  • $$:直接量符号。

在字符串中用某些字符替换另一些字符。

str="Please visit Microsoft!"
var n=str.replace("Microsoft","Runoob");

在本例中,我们将把 "Doe, John" 转换为 "John Doe" 的形式:

name = "Doe, John";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");

在本例中,我们将把所有的花引号替换为直引号:

name = '"a", "b"';
name.replace(/"([^"]*)"/g, "'$1'");

在本例中,我们将把字符串中所有单词的首字母都转换为大写:

name = 'aaa bbb ccc';
uw=name.replace(/\b\w+\b/g, function(word){
  return word.substring(0,1).toUpperCase()+word.substring(1);}
  );

12、search():检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

返回stringObject 中第一个与 regexp 相匹配的子串的起始位置。

注释:如果没有找到任何匹配的子串,则返回 -1。

search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。

var str="Visit W3School!"
document.write(str.search(/w3school/i)) //6

13、split():字符串转为数组

stringObject.split(separator,howmany)

若只需要返回一部分字符,可使用 howmany 参数。

如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)。

如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

注释:String.split() 执行的操作与 Array.join 执行的操作是相反的。

字符串使用split()函数转为数组:

var str="How are you doing today?"

document.write(str.split(" ") + "
") document.write(str.split("") + "
") document.write(str.split(" ",3)) //How,are,you,doing,today? //H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,? //How,are,you/

使用下面的代码,可以把句子分割成单词:

var words = sentence.split(' ')

或者使用正则表达式作为 separator:

var words = sentence.split(/\s+/)

14、toUpperCase() / toLowerCase():字符串大小写转换

字符串大小写转换使用函数 toUpperCase() / toLowerCase():

var txt="Hello World!";       // String
var txt1=txt.toUpperCase();   // txt1 文本会转换为大写
var txt2=txt.toLowerCase();   // txt2 文本会转换为小写

15、trim():移除字符串首尾空白

去除字符串的头尾空格:

var str = "       Runoob        ";
alert(str.trim()); //Runoob

如果你的浏览器不支持 trim() 方法,你可以使用正则表达式来实现:

function myTrim(x) {
  return x.replace(/^\s+|\s+$/gm,'');
}
 
function myFunction() {
  var str = myTrim("        Runoob        ");
  alert(str);
}

posted on 2019-03-08 11:16  springsnow  阅读(182)  评论(0编辑  收藏  举报

导航