ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript文字列実践ルーチンの詳細

JavaScript文字列実践ルーチンの詳細

黄舟
黄舟オリジナル
2017-03-03 14:58:331071ブラウズ

JavaScript 文字列は、テキストの保存と操作に使用されます。したがって、ユーザー入力データを処理するとき、DOM オブジェクトのプロパティを読み取ったり設定するとき、Cookie を操作するとき、さまざまな日付を変換するときなど、彼女は常にあなたと一緒にいます。 count; と彼女の多数の API は、私が頻繁に使用するものなので、Bad Writing を通して参照し、ブログの存在を反映することも考えます。 。 烂笔头一翻,顺道也体现下博客存在的价值,由此就有了这篇纪要。

字符串截取

1. substring()

xString.substring(start,end)

substring()是最常用到的字符串截取方法,它可以接收两个参数(参数不能为负值),分别是要截取的开始位置和结束位置,它将返回一个新的字符串,其内容是从start处到end-1处的所有字符。若结束参数(end)省略,则表示从start位置一直截取到最后。

let str = 'www.jeffjade.com'
console.log(str.substring(0,3)) // www
console.log(str.substring(0))   //www.jeffjade.com
console.log(str.substring(-2))  //www.jeffjade.com (传负值则视为0)

2. slice()

stringObject.slice(start, end)

slice()方法与substring()方法非常类似,它传入的两个参数也分别对应着开始位置和结束位置。而区别在于,slice()中的参数可以为负值,如果参数是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符。

let str = 'www.jeffjade.com'
console.log(str.slice(0, 3))    // www
console.log(str.slice(-3, -1))  // co
console.log(str.slice(1, -1))   // www.jeffjade.co
console.log(str.slice(2, 1))    // '' (返回空字符串,start须小于end)
console.log(str.slice(-3, 0))   // '' (返回空字符串,start须小于end)

3. substr()

stringObject.substr(start,length)

substr()方法可在字符串中抽取从start下标开始的指定数目的字符。其返回值为一个字符串,包含从 stringObject的start(包括start所指的字符)处开始的length个字符。如果没有指定 length,那么返回的字符串包含从start到stringObject的结尾的字符。另外如果start为负数,则表示从字符串尾部开始算起。

let str = 'www.jeffjade.com'
console.log(webStr.substr(1, 3))   // ww.
console.log(webStr.substr(0))      // www.jeffjade.com
console.log(webStr.substr(-3, 3))  // com
console.log(webStr.substr(-1, 5))  // m  (目标长度较大的话,以实际截取的长度为准)

4. split()

str.split([separator][, limit])
  • separator 指定用来分割字符串的字符(串)。separator 可以是一个字符串或正则表达式。 如果忽略 separator,则返回整个字符串的数组形式。如果 separator 是一个空字符串,则 str 将会把原字符串中每个字符的数组形式返回。

  • limit 一个整数,限定返回的分割片段数量。split 方法仍然分割每一个匹配的 separator,但是返回的数组只会截取最多 limit 个元素。

let str = 'www.jeffjade.com'
str.split('.')      // ["www", "jeffjade", "com"]
str.split('.', 1)   // ["www"]
str.split('.').join('') // wwwjeffjadecom

话说这个函数真心好用,很多时候的字符截取需求,就是依赖于某个字符;而以上三个函数都需知道其位置。我们当然可以借助 indexOf 等方法获取,很显然这很繁琐;而借助 split 则显得更轻而易举。

查找类方法

1. indexOf() & includes()

stringObject.indexOf(searchValue,fromIndex)

indexOf()用来检索指定的字符串值在字符串中首次出现的位置。它可以接收两个参数,searchValue 表示要查找的子字符串,fromIndex 表示查找的开始位置,省略的话则从开始位置进行检索。

let str = 'www.jeffjade.com'
console.log(str.indexOf('.'))     // 3
console.log(str.indexOf('.', 1))  // 3
console.log(str.indexOf('.', 5))  // 12
console.log(str.indexOf('.', 12)) // -1

虽然 indexOf()

文字列インターセプト

1. substring()

if (str.indexOf('yoursPecifiedStr') !== -1) {
    // do something
}

substring() は、最も一般的に使用される文字列インターセプト メソッドであり、次の 2 つのパラメーターを受け取ることができます (パラメーターは負の値にすることはできません)。開始位置と終了位置を指定すると、内容が start から end-1 までのすべての文字である新しい文字列が返されます。終了パラメータ(end)を省略した場合は、開始位置から最後までインターセプトすることを意味します。

str.includes(searchString[, position])
2. slide()
'Blue Whale'.includes('blue'); // returns false
'乔峰乔布斯乔帮主'.includes('乔布斯'); // returns true
if (str.includes('yoursPecifiedStr')) {
    // do something(这样写是不是更为人性化?Yeah,这是一个更趋向人性化的时代嘛)
}
slice() メソッドは、substring() メソッドと非常によく似ており、それぞれ開始位置と終了位置に対応します。違いは、slice() のパラメーターが負の値である場合、パラメーターは文字列の末尾から開始する位置を指定することです。つまり、-1 は文字列の最後の文字を指します。
stringObject.lastIndexOf(searchValue,fromIndex)

3. substr()

let str = 'www.jeffjade.com'
console.log(str.lastIndexOf('.'))     // 12
console.log(str.lastIndexOf('.', 1))  // -1
console.log(str.lastIndexOf('.', 5))  // 3
console.log(str.lastIndexOf('.', 12)) // 12

substr()メソッドは、文字列の開始添え字から指定された数の文字を抽出できます。戻り値は、stringObject の先頭から始まる長さの文字 (start が指す文字を含む) を含む文字列です。長さが指定されていない場合、返される文字列には stringObject の先頭から末尾までの文字が含まれます。また、start が負の数の場合は、文字列の末尾から数えることを意味します。

stringObject.search(substr)
stringObject.search(regexp)

4.split()

let str = 'www.jeffjade.com'
console.log(str.search('w'))    // 0
console.log(str.search(/j/g))   // 4
console.log(str.search(/\./g))  // 3

separator は、文字列を分割するために使用される文字 (文字列) を指定します。区切り文字には文字列または正規表現を使用できます。 区切り文字を省略した場合は、文字列全体の配列が返されます。 separator が空の文字列の場合、str は元の文字列の各文字の配列を返します。

  • limit 返される分割フラグメントの数を制限する整数。 Split メソッドは引き続き一致する各セパレーターを分割しますが、返される配列は制限された要素までしかインターセプトしません。

  • stringObject.match(substr)
    stringObject.match(regexp)
    この関数は非常に使いやすいと言われています。多くの場合、文字インターセプトの要件は特定の文字に依存しており、上記の 3 つの関数はすべてその位置を知る必要があります。もちろん、indexOf などのメソッドを使用して取得することもできますが、これは明らかに非常に面倒ですが、split を使用すると簡単になります。

    Find クラス メソッド

    1.indexOf() & include()

    let str = '#1a2b3c4d5e#';
    console.log(str.match('A'));    //返回null
    console.log(str.match('b'));    //返回["b", index: 4, input: "#1a2b3c4d5e#"]
    console.log(str.match(/b/));    //返回["b", index: 4, input: "#1a2b3c4d5e#"]

    indexOf() は、指定された文字列値が文字列内で最初に出現する位置を取得するために使用されます。 2 つのパラメータを受け取ることができます。searchValue は検索する部分文字列を表し、fromIndex は検索の開始位置を表します。省略した場合、検索は開始位置から実行されます。

    let str = '#1a2b3c4d5e#'
    console.log(str.match(/h/g))     //返回null
    console.log(str.match(/\d/g))    //返回["1", "2", "3", "4", "5"]

    indexOf() は、指定された文字列値が文字列内で最初に出現する位置を取得するために使用されますが、多くの場合、指定された文字列が文字列内に存在するかどうかを判断するために使用されます。コードは次のようになります: 🎜
    stringObject.replace(regexp/substr,replacement)
    🎜 このようなシナリオでは、ES6 言語の include() ははるかに洗練されており、文字列が別の string に含まれるかどうかを判断するために使用されることを知っておく必要があります。それ以外の場合は true を返し、それ以外の場合は false を返します。 🎜
    let str = 'www.jeffjade.com'
    console.log(str.replace('w', 'W'))   // Www.jeffjade.com
    console.log(str.replace(/w/, 'W'))   // Www.jeffjade.com
    🎜🎜searchString🎜 検索される部分文字列。 🎜位置🎜 オプション。部分文字列の検索を開始する現在の文字列のインデックス位置は、デフォルトでは 0 です。 include() では大文字と小文字が区別されることに注意してください。 🎜
    let str = 'www.jeffjade.com'
    console.log(str.replace(/w/g, 'W'))   // WWW.jeffjade.com
    🎜2. lastIndexOf()🎜
    stringObject.toLowerCase()
    stringObject.toUpperCase()
    🎜lastIndexOf() 構文は、指定された部分文字列値の最後の出現位置を返し、その取得順序は後ろから前です。 🎜
    let str = 'www.jeffjade.com'
    console.log(str.toLowerCase())   // www.jeffjade.com
    console.log(str.toUpperCase())   // WWW.JEFFJADE.COM
    🎜search()🎜
    function ncieFunc() {
      return "四海无人对夕阳";
    }
    var niceMan = "陈寅恪";
    var jadeTalk = `一生负气成今日 \n ${ncieFunc()} ,
    语出 ${niceMan} 的《忆故居》。
    `
    console.log(jadeTalk)
    🎜search() メソッドは、文字列内の指定された部分文字列を取得するか、正規表現に一致する部分文字列を取得するために使用されます。最初に一致した部分文字列の開始位置を返します。一致するものがない場合は -1 を返します。 🎜
    String.prototype.reverse = function () {
    	return this.split('').reverse().join('')
    }
    🎜match() メソッド 🎜
    String.prototype.removeBlankLines = function () {
    	return this.replace(/(\n[\s\t]*\r*\n)/g, '\n').replace(/^[\n\r\n\t]*|[\n\r\n\t]*$/g, '')
    }
    🎜match() メソッドは、文字列内の指定された値を取得したり、1 つ以上の正規表現の一致を検索したりできます。 🎜🎜渡されたパラメータがグローバル一致を実行しない部分文字列または正規表現の場合、match() メソッドは先頭から一致を実行します。一致する結果がない場合は、null が返されます。それ以外の場合、配列の 0 番目の要素には一致するテキストが格納されます。さらに、返される配列には、一致するテキストと stringObject の開始文字インデックスを表す 2 つのオブジェクト属性も含まれます。参照 (つまり、元の文字列)。 🎜
    let Str = '陈寅恪,鲁迅,钱钟书,胡适,王国维,梁启超,吴宓,季羡林'
    let hallAllOfFameArr = Str.split(',')
    console.log(hallAllOfFameArr)
    // ["陈寅恪", "鲁迅", "钱钟书", "胡适", "王国维", "梁启超", "吴宓", "季羡林"]
    🎜 パラメータがグローバル一致の正規表現で渡された場合、match() は最初から最後まで複数回一致します。結果が見つからない場合は、null が返されます。それ以外の場合は、要件を満たすすべての部分文字列を格納し、インデックスと入力属性を持たない配列が返されます。 🎜
    let str = '#1a2b3c4d5e#'
    console.log(str.match(/h/g))     //返回null
    console.log(str.match(/\d/g))    //返回["1", "2", "3", "4", "5"]

    其他方法

    replace()方法

    stringObject.replace(regexp/substr,replacement)

    replace()方法用来进行字符串替换操作,它可以接收两个参数,前者为被替换的子字符串(可以是正则),后者为用来替换的文本。

    如果第一个参数传入的是子字符串或是没有进行全局匹配的正则表达式,那么replace()方法将只进行一次替换(即替换最前面的),返回经过一次替换后的结果字符串。

    let str = 'www.jeffjade.com'
    console.log(str.replace('w', 'W'))   // Www.jeffjade.com
    console.log(str.replace(/w/, 'W'))   // Www.jeffjade.com

    如果第一个参数传入的全局匹配的正则表达式,那么replace()将会对符合条件的子字符串进行多次替换,最后返回经过多次替换的结果字符串。

    let str = 'www.jeffjade.com'
    console.log(str.replace(/w/g, 'W'))   // WWW.jeffjade.com

    toLowerCase() & toUpperCase()

    stringObject.toLowerCase()
    stringObject.toUpperCase()

    toLowerCase()方法可以把字符串中的大写字母转换为小写,toUpperCase()方法可以把字符串中的小写字母转换为大写。

    let str = 'www.jeffjade.com'
    console.log(str.toLowerCase())   // www.jeffjade.com
    console.log(str.toUpperCase())   // WWW.JEFFJADE.COM

    模板字符串

    这个也是 ES6 才引入进来的新语法,来解决传统输出String模板的蹩脚问题;其功能之强大,设计之贴心,着实令人得到极大满足感,好如久旱逢甘霖一般的舒畅。更何况,在当今 MVVM 前端框架大行其道的时代,使用 ES6 语法也是不用自己个儿去操心兼容性问题,对于塑造 Dom Template 更是如虎添翼,令人爱不释手。

    对于她的使用,阮一峰在ECMAScript 6 入门有过详细的描述以及示例,在此就不赘述。只需要明白我们可以像这样去操作了,试问爽否?

    function ncieFunc() {
      return "四海无人对夕阳";
    }
    var niceMan = "陈寅恪";
    var jadeTalk = `一生负气成今日 \n ${ncieFunc()} ,
    语出 ${niceMan} 的《忆故居》。
    `
    console.log(jadeTalk)

    运行之,Chrome Console 输出结果如下:

    一生负气成今日
    四海无人对夕阳 ,
    语出 陈寅恪 的《忆故居》。

    组合其法

    细看 JavaScript 提供的String Api,还是有蛮多的,也有些许废弃的,也有将在未来版本会出来的;这其中不乏很多也挺有用的,譬如: charAt(x)、charCodeAt(x)、concat(v1, v2,…)、fromCharCode(c1, c2,…) 等等,还有 ES6 对字符串的扩展,比如 字符串的遍历器接口,repeat() 等等,这可以参见 ES6-string,这里就不多赘述。

    在实际代码生产中,很多时候需要用这些提供的基本方法,来打出一套组合拳,以解决其需求所需。很显然又可以借助 prototype 属性,将自造的各路拳法,其归置于 String 对象,然后天亮啦。这一步就看个人喜好了,这里抛出一二段,以引大玉。

    字符串反转

    String.prototype.reverse = function () {
    	return this.split('').reverse().join('')
    }

    去除空白行

    String.prototype.removeBlankLines = function () {
    	return this.replace(/(\n[\s\t]*\r*\n)/g, '\n').replace(/^[\n\r\n\t]*|[\n\r\n\t]*$/g, '')
    }

    String转化为数组

    1, 转化为一维数组

    场景是根据某子字符串转化,直接就用 split 就好;如果转换规则不统一,那么请自求多福吧。

    let Str = '陈寅恪,鲁迅,钱钟书,胡适,王国维,梁启超,吴宓,季羡林'
    let hallAllOfFameArr = Str.split(',')
    console.log(hallAllOfFameArr)
    // ["陈寅恪", "鲁迅", "钱钟书", "胡适", "王国维", "梁启超", "吴宓", "季羡林"]

    2, 转化为二维数组

    String.prototype.removeBlankLines = function () {
    	return this.replace(/(\n[\s\t]*\r*\n)/g, '\n').replace(/^[\n\r\n\t]*|[\n\r\n\t]*$/g, '')
    }
    String.prototype.strTo2dArr = function(firstSplit, secondSplit){
    	var contentStr = this.removeBlankLines(),
    		contentStrArr = contentStr.split(firstSplit),
    		resultArr = contentStrArr.map((element) => {
                return element.split(secondSplit)
            })
    	return resultArr
    }
    var str = `
    渺渺钟声出远方,依依林影万鸦藏。
    一生负气成今日,四海无人对夕阳。
    破碎山河迎胜利,残馀岁月送凄凉。
    松门松菊何年梦,且认他乡作故乡。
    `
    console.log(str.strTo2dArr('\n', ','))

    运行之,输出结果如下:

    [ [ ‘渺渺钟声出远方’, ‘依依林影万鸦藏。’ ],
    [ ‘一生负气成今日’, ‘四海无人对夕阳。’ ],
    [ ‘破碎山河迎胜利’, ‘残馀岁月送凄凉。’ ],
    [ ‘松门松菊何年梦’, ‘且认他乡作故乡。’ ] ]

    抗战时期,陈寅恪先生在给傅斯年的信中,说了这样一段话:“弟之生性,非得安眠饱食,不能作文,非是既富且乐,不能作诗,平生偶有安眠饱食之时,故偶可为文,而一生从无既富且乐之日,故总做不好诗。” 虽是以调侃的以言说,恐也是寄之感慨的悟道之语。自由独立的经济生活,是自由思想与独立人格的坚强后盾与实际保障。写博这事儿,也是一样,整日疲于需求之成改,熬时碌碌,生为糊口;偶有的闲时气力,哪儿是能经得起折腾的?唯是在垒码的间隙,略做记录,积而成篇。而这番为得的糊口的奋争,也是希望将来的某天——能有既富且乐之时,谈那些想谈的,做那些想做的事,如此而已。

     以上就是JavaScript 字符串实用常操纪要详情的内容,更多相关内容请关注PHP中文网(www.php.cn)!

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。