说明
JavaScript 正则表达式 g、i、m分别代表的意思
g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即
停止;
i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模
式匹配的项。
首次尝试
因为对字符串不熟,直觉想到的是直接字符串转数组然后去除首尾空格,但是只能删除首尾各一个空格:
<!DOCTYPE html><html><head></head><body></body><script>function noTrim(str) {const strArrNoTrim = [];let strArr = Array.from(str);// 这种,只能去除前后各一个空格strArr.forEach((val, index) => {if (!(val == ' ' && (index == 0 || index == (strArr.length - 1)))) {strArrNoTrim.push(val);}});return arrToStr(strArrNoTrim);}function arrToStr(strArr) {let str = '';strArr.forEach((val) => {str = str + val;})return str;}console.log(' 1 2 3 ');console.log(noTrim(' 1 2 3 '));</script></html>
正则:
<!DOCTYPE html><html><head></head><body></body><script>function noTrim(str) {// *:0次或者多次,即可以没有;+:1次或者多次,即一定要有至少一个return str.replace(/(^\s*)|(\s*$)/g, "");}const input = ' 你就 的 ';console.log(`input str length: ${input.length},input str: ${input}`);let inputAtf = noTrim(input);console.log(`input str length aft: ${inputAtf.length},input str aft: ${inputAtf}`);</script></html>
因为对正则不熟,每次搜索到正则,都会去看看意思:
上述正则str = /(^\s*)|(\s*$)/g)
\s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。我理解就是可以匹配全局空格了。去试验了,证实了。
^:开始;
$:结束
g:全局查询,不会在遇到一个匹配项时停止。