阅读背景:

实现去除字符串两端空白(相当于trim)功能的正则表达式/^\s*((.|\n)*\S)?\s*$/

来源:互联网 
上面的正则表达式是匹配任何字符串的, 所以总能将目标字符串替换成上面的正则表达式是匹配任何字符串的, 所以总能将目标字符串替换成$1(意识到这点很重要)  首先因为^\s*后没有紧跟?(即^\s*?), 所以正则表达式^\s*尝试贪婪地(尽可能多地)匹配目标字符串中以0或多个空白字符开始的字符 , 这儿是任何以非空白字符开始非空白字符结束的字符串, 因为开始的空白字符已经被A贪婪了, 而结束的非空白字符是匹配\S的字符, (.|\n)*虽然很贪婪, 但它会留一个给\S的以保证匹配 否则 匹配的长度不好判断 应该尝试构造一个能够匹配任何字符串的正则表达式, 然后去提取需要的部分 它 不匹配字符串' ', 那么它将不会得到处理, 这也就是为什么会是((.|\n)*\S)?, 因为要为这种情况考虑 当源字符串不匹配它时(这时字符串替换将失败), 它匹配由非空白字符开始和结束的字符串(这样才可以不进行替换)  悲剧的是还写错了: str.replace(/^(\s*)(\S*)(\s*)$/, '$2'); // 今天才想起来过去好像写错了, 惭愧... 今晚要考C++了, 希望可以考高分, 顺便祝那些即将高考的孩子们考出好成绩, 高考结束后慎重些填志愿, 别被学校名骗了... 
(意识到这点很重要) 
首先因为^\s*后没有紧跟?(即^\s*?), 所以正则表达式^\s*尝试贪婪地(尽可能多地)匹配目标字符串中以0或多个空白字符开始的字符 ,首先因为


你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: