AS3中如何移除换行符后行首字符前的空格与制表符?
解决AS3中移除换行后行首空白的正则方案
嘿,这个问题我之前处理文本格式化时也碰到过,给你几个实用的解决方案,帮你搞定这个需求!
先明确下你的目标:把字符串里所有换行符(\n)之后、有效字符之前的空格和制表符都去掉,比如把My first line\n 2nd line having lots of spaces/tabs and\n this continues转换成My first line\n2nd line having lots of spaces/tabs and\nthis continues对吧?
方案1:用正向预查直接匹配换行后的空白
这个写法最直观,直接定位到换行符后面的空白字符然后删掉:
var originalStr:String = "My first line\n 2nd line having lots of spaces/tabs and\n this continues"; // 匹配所有紧跟在\n之后的一个或多个空白(空格/制表符) var trimRegex:RegExp = /(?<=\n)\s+/g; var cleanedStr:String = originalStr.replace(trimRegex, ""); trace(cleanedStr); // 输出结果: // My first line // 2nd line having lots of spaces/tabs and // this continues
解释下这个正则:
(?<=\n):正向肯定预查,确保当前位置前面是一个换行符\n\s+:匹配一个或多个空白字符(包括空格和制表符\t)g:全局修饰符,保证替换所有符合条件的匹配项
方案2:捕获换行符并保留,替换掉后续空白
如果需要兼容Windows(\r\n)或旧Mac(\r)的换行格式,这个方案更稳妥:
var originalStr:String = "My first line\r\n 2nd line having lots of spaces/tabs and\r this continues"; // 捕获所有常见换行格式,再匹配后续空白 var trimRegex:RegExp = /(\r?\n|\r)\s+/g; var cleanedStr:String = originalStr.replace(trimRegex, "$1"); trace(cleanedStr); // 输出结果同样会去掉换行后的空白,同时保留原换行格式
这个正则里:
(\r?\n|\r):捕获组,匹配三种主流换行格式:\n(Unix)、\r\n(Windows)、\r(旧Mac)$1:在替换时引用捕获到的换行符,只删掉后面的空白字符
方案3:多行模式下匹配行首空白
如果你确定不需要保留第一行的前导空白(或者你的文本第一行本来就没有),用多行修饰符m的方案最省心:
var originalStr:String = "My first line\n 2nd line having lots of spaces/tabs and\n this continues"; // 多行模式下,^会匹配每一行的开头(包括换行后的位置) var trimRegex:RegExp = /^\s+/gm; var cleanedStr:String = originalStr.replace(trimRegex, ""); trace(cleanedStr);
这个方案会把所有行的前导空白都去掉,包括第一行(如果有的话),适合通用的文本行首去空白场景。
为什么你之前的正则可能没生效?
大概率是没处理好换行符的定位或者修饰符:比如只写了匹配空格的正则,没关联换行符;或者没加全局修饰符g,导致只替换了第一个匹配项;又或者没使用多行模式m,让^只匹配整个字符串的开头而非每行开头。
内容的提问来源于stack exchange,提问作者Santanu Karar
相关产品推荐
相关产品推荐

