「字符串题」2. 颠倒字符串中的单词 #正则

96 阅读3分钟

算法刷题系列,详解解题过程中遇到的知识点,解释过一遍的知识点不会重复解释。

Leetcode 151. 颠倒字符串中的单词

image.png

解题思路

将字符串头尾空格去掉,然后将多个空格用正则替换成一个空格,根据空格分隔成数组,然后翻转转回字符串。

代码

/**
 * @param {string} s
 * @return {string}
 */
var reverseWords = function(s) {
    return s.trim().replace(/\s+/g, ' ').split(' ').reverse().join(' ')
};

要点详解

1. 正则表达式

正则表达式是用于匹配字符串中组合的模式,使用一个正则表达式字面量,其由包含在斜杠内的模式组成。

let reg = /a+/

两种模式

  • 简单模式

字面量由你想知道找到的字符构成,比如 /abc/就能且仅能匹配 "abc"

  • 特殊字符

当你需要匹配一个不确定的字符串时,比如匹配 1 个或者多个 "b" 或者寻找空格,就可以使用特殊字符,比如可以使用 /a+/ 来匹配 aaa + 表示一个或者多个。

特殊字符

  1. 断言,表示一个匹配在某些条件下发生。断言包含先行断言、后行断言和条件表达式。
  • /^a/匹配以a开头
  • /$a/表示以a结尾
  • /\ba/匹配a字符前没有另外一个字符位置。
  • /\Ba/匹配a字符前有另外一个字符的位置。
  • /a(?=b)/,匹配后面跟随ba
  • /a(?!b)/,匹配后面不跟随ba
  • /(?<=b)a/向后断言,匹配前面b开头的a
  • /(?<!b)a/向后否定断言,匹配前面不以b开头的a
  1. 字符类,区分不同类型的字符,例如区分字母和数字。
  • /\d/匹配任何数字
  • /\D/匹配任何非数字
  • /\w/匹配任何字母数字
  • /\W/匹配任何非字母数字
  • /\s/匹配单个空白字符
  • /\S/匹配空格意外的单个字符
  • /\t/匹配水平制表符
  • /\n/匹配换行符
  • /\v/匹配垂直制表符
  • /\f/匹配换页符
  • /[\b]/匹配退格符
  • /\0/匹配一个 NUL 字符,不要在此后面加上另一个数字。
  1. 组和范围,表示表达式字符的分组和范围。
  • /a|b/ 匹配 "a""b" 任意一个字符
  • /[a-c]/匹配任何一个包含的字符,可以用 - 来指定字符范围。
  1. 量词,表示匹配的字符或表达式的数量。
  • /x*/表示将x匹配 0 次或者更多次。
  • /x+/表示将x匹配 1 次或者更多次
  • /x?/表示将x匹配 0 次或 1 次
  • /x{n}/表示将x匹配 n 次
  • /x{n, }/表示至少匹配 n 次
  • /x{n, m}/表示匹配 n~m 次
  • 再以上符号后添加 ? 匹配非贪婪的字符串

2. trim()

string.trim() 去掉字符串头部和尾部的空格,并返回,且该方法不会改变原始字符串。

let a = ' 111 '
console.log(a.trim()); // '111'

3. replace()

string.replace(searchvalue,newvalue) 用一些字符,替换另一些字符,或替换与正则表达式匹配的子串,并返回,且该方法不会改变原始字符串。

// 用一些字符替换另一些字符
let a = 'abc'
console.log(a.replace('a', 'c'))  // 'cbc'

// 替换与正则表达式匹配的字符
let a = 'abac'
console.log(a.replace(/[a]/g, b)) // 'bbbc'

4. split()

string.split(separator,limit)

把一个字符串分割成字符串数组并返回

参数

  1. separator,可选,字符串或者正则表达式,表示从该参数指定的地方分割,如果在 str 中省略或不出现分隔符,则返回的数组包含一个由整个字符串组成的元素。
  2. limit,可选,指定返回数组的最大长度。
let a = "1 2 3 4"
console.log(a.split(' ')); // ['1', '2', '3', '4']
console.log(a.split(/[1-2]/g) ) // ['', ' ', ' 3 4']

5. reverse()

array.reverse()

颠倒数组中元素的位置并返回,不改变原数组,

let a = [1,2,3,4]
console.log(a.reverse()) // [4, 3, 2, 1]

6. join()

array.join(separator)

用于把数组中的所有元素转换一个字符串

参数 separator,指定要使用的分隔符,如果省略该参数