JavaScript正则表达式与自定义函数实现字符串去空格详解

作者:代码拾荒时间:2026-10-26 20:04:55浏览:625

本文详细介绍在JavaScript中利用正则表达式删除字符串前后空格的方法,涵盖trim、ltrim和rtrim的实现。同时深入解析正则表达式中的贪婪与勉强模式,并提供基于原型链和独立函数的自定义去空格代码示例及测试验证。

JavaScript正则表达式基础去空格示例

示例


代码如下:

 
<script>
var str=" yexj00 ";
str=str.replace(/^s*|s*$/g,'');
alert(str);
</script>

示例


模仿RTrim:


代码如下:

 
<script>
var str="yexj00 ";
str=str.replace(/s*$/g,'');
alert(str);
</script>

示例



代码及测试代码如下:


代码如下:

 
<script type="text/javascript">
//删除字符串两侧的空白字符。
function trim(str){
return str.replace(/^s+|s+$/g,'');
} 
//删除字符串左侧的空白字符。
function ltrim(str){
return str.replace(/^s+/g,'');
} 
//删除字符串右侧的空白字符。
function rtrim(str){
return str.replace(/s+$/g,'');
} 
//以下为测试代码
var trimTest = " 123456789 ";
//前后各有一个空格。
document.write('length:'+trimTest.length+'<br />');
//使用前
document.write('ltrim length:'+ltrim(trimTest).length+'<br />');
//使用ltrim后
document.write('rtrim length:'+rtrim(trimTest).length+'<br />');
//使用rtrim后
document.write('trim length:'+trim(trimTest).length+'<br />');
//使用trim后
</script>

测试结果如下:


代码如下:

 
length:11
ltrim length:10
rtrim length:10
trim length:9

正则表达式深层原理分析

用js正则表达式删除字符串前后空格


代码如下:

 
String.prototype.trim=function(){
var reSpace=/^\s*(.*?)\s*$/;
return this.replace(reSpace,”$1″);
}; 

让我们分析第二行的正则表达式


^ 行开始


\s*


匹配字符前面的所有空格,贪婪模式重复


(.*?)

捕获组,勉强模式重复匹配任意字符,即最终需要(去掉前后空格后)的字符,这点较难理解(我认为)


第一:我原以为捕获组内应判断首字符非空格,即写成([^\s+])形式,但这完全没必要,因为捕获组前的\s*已捕获所有开头空格,你理解的捕获组字符起始范围与正则表达式匹配范围不同,汗~有点说不清,呵呵


第二:?的作用,即勉强模式重复前字符,若用(.*a)匹配aaaaaaa结果为(aaaaaaa),此为贪婪模式;若用(.*?a)匹配,则先匹配第一a,再第二个a,依此类推,此为勉强模式匹配,亦称懒惰模式匹配。通俗讲(大家都喜欢通俗解释,呵呵),前者从后往前匹配尽可能多字符,后者从前往后匹配


第三:还需关心捕获组后空格吗?因捕获组中“.”也可匹配空格,此前我也纠结于此,浪费大量时间。其实这与是否排除捕获组前空格同理,后\s*已处理


\s*匹配字符后面的空格


———————————————————分割线——————————————————–


自定义字符串去空格函数实现

自定义三个trim()函数来过滤字符串左右两边的空格。


代码如下:

 
//js去除空格函数
//此处为string类添加三个成员
String.prototype.Trim = function(){ return Trim(this);}
String.prototype.LTrim = function(){return LTrim(this);}
String.prototype.RTrim = function(){return RTrim(this);}
//此处为独立函数
function LTrim(str)
{ 
var i;
for(i=0;i<str.length;i++)
{ 
if(str.charAt(i)!=” “&&str.charAt(i)!=” “)break;
} 
str=str.substring(i,str.length);
return str;
} 
function RTrim(str)
{ 
var i;
for(i=str.length-1;i>=0;i–)
{ 
if(str.charAt(i)!=” “&&str.charAt(i)!=” “)break;
} 
str=str.substring(0,i+1);
return str;
} 
function Trim(str)
{ 
return LTrim(RTrim(str));
} 

———————————————————分割线——————————————————–


代码如下:

 
<script type=”text/javascript”>
function trim(str){ //删除左右两端的空格
return str.replace(/(^\s*)|(\s*$)/g, “”);
} 
function ltrim(str){ //删除左边的空格
return str.replace(/(^\s*)/g,”");
} 
function rtrim(str){ //删除右边的空格
return str.replace(/(\s*$)/g,”");
} 
</script>
function checkSubmit(){
if(confirm(“是否确认保存数据?”)){
var ab = document.getElementById(“name”).value;
var dj = document.getElementById(“dj”).value;
var xy = ab.replace(/(^\s*)|(\s*$)/g, “”);
if(xy!=”"&&dj!=”"){
document.dwbzjlspb.action = “”;
document.dwbzjlspb.submit();
return true;
}else{
alert(“单位名称或拟申报等级不能为空!”);
} 
}else{
return false;
} 
}; 
作者最新文章