正则表达式问题,高手们进来瞧瞧!

hmbory 2003-12-30 05:00:47
现有一串字符串,要把重复的字符给去掉,怎么办?
例:字符串为"604134a,604135b,604134c,604134a,604134d,604134e,604134c,604134d,604134e,"
得到的结果为"604134a,604135b,604134c,604134d,604134e"

大侠们帮我写写个表达式!谢了
...全文
31 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuangren 2003-12-31
  • 打赏
  • 举报
回复
这样结果首尾各有一个空格,其实把你的第二次回复改改也可以

<script>
var str = "a,a,c,a,d,c,c,a,d,b,";
str = str.split(",").sort().join(",")+","; //加个逗号
document.write("*" + str + "*");
document.write("<BR>");
str = str.replace(/([^,]+,)\1+/g,"$1").replace(/^,/,"").replace(/,$/,""); //去掉首尾逗号
document.write("*" + str + "*")
</script>
bencalie 2003-12-31
  • 打赏
  • 举报
回复
对不住,刚才忘记了最后的字符是没有空格的

<script>
var str = "a,a,c,a,d,c,c,a,d,b,";
str = str.split(",").sort().join(" ");
document.write(str);
document.write("<BR>");
str = str.replace(/(\S+) (\1 ?)+/g,"$1 ");
document.write(str)
</script>
shuangren 2003-12-31
  • 打赏
  • 举报
回复
哈哈哈,都不对,还是有重复的
建议这样写,看起来方便些
var str = "a,a,c,a,d,c,c,a,d,b,";
shuangren 2003-12-31
  • 打赏
  • 举报
回复
噢,果然是向后引用。正则表达式真是很强大很方便
bencalie 2003-12-31
  • 打赏
  • 举报
回复
<script>
var str = "604134a,604135b,604134c,604134a,604134d,604134c,604134e,604134c,604134d,604134e,";
str = str.split(",").sort().join(" ");
document.write(str);
document.write("<BR>");
str = str.replace(/\b(.+) (\1 )+/g,"$1 ");
document.write(str)
</script>
bflovesnow 2003-12-31
  • 打赏
  • 举报
回复
奇怪,为什么 604134c 还有两个???
bflovesnow 2003-12-31
  • 打赏
  • 举报
回复
bencalie(Bencalie) 的我运行没成。
试试:

var str = "604134a,604135b,604134c,604134a,604134d,604134c,604134e,604134c,604134d,604134e,";
str = str.split(",").sort().join(" ");
document.write(str);
document.write("<BR>");
str = str.replace(/\b(.+) \1\b/g,"$1");
document.write(str)
bflovesnow 2003-12-31
  • 打赏
  • 举报
回复
在手册中的"向后引用"部分。
bencalie 2003-12-30
  • 打赏
  • 举报
回复
肯定有,只是你没找着
shuangren 2003-12-30
  • 打赏
  • 举报
回复
高兴,又学会了一点新东东
郁闷,参考手册上没有介绍
bencalie 2003-12-30
  • 打赏
  • 举报
回复
\1 表示第一个()匹配的结果

+ 表示匹配一次或者一次以上
shuangren 2003-12-30
  • 打赏
  • 举报
回复
\1是什么意思?是前面的匹配一次?
\1+是什么意思?是多次?
yjgx007 2003-12-30
  • 打赏
  • 举报
回复
重写了一个,应该没问题了
---------------------------

<script>
function replace(){
var str = "604134a,604135b,604134c,604134a,604134d,604134e,604134c,604134d,604134e,";
var arr = str.split(",");
var newstr = new String();
for (i =0; i < arr.length; i++)
{
if (newstr.indexOf(arr[i]) < 0 )
newstr += arr[i] + ",";
}
alert(newstr);
}
</script>
<input type=button onclick="replace()" value="Click me">
bencalie 2003-12-30
  • 打赏
  • 举报
回复
<script>
var str = "604134a,604135b,604134c,604134a,604134d,604134c,604134e,604134c,604134d,604134e,";
str = str.split(",").sort().join(",").replace(/^,/,"");
str = str.replace(/([^,]+,)\1+/g,"$1"); //多个+试试?
alert(str)
</script>
yjgx007 2003-12-30
  • 打赏
  • 举报
回复
我也写一个,但还要完善

function replace(){
var str = "604134a,604135b,604134c,604134a,604134d,604134e,604134c,604134d,604134e,";
var arr = str.split(",");
for (i =0; i < arr.length; i++)
{
str = str.replace(arr[i], "");
if (str.indexOf(arr[i]) < 0 )
str += arr[i] + ",";
}
alert(str);
}
</script>
<input type=button onclick="replace()" value="Click me">
hmbory 2003-12-30
  • 打赏
  • 举报
回复
不用正则表达式是可以解决的,只是想尽量缩短代码。如果可以用正则表达式的话就可以少了那么多!
leeeel 2003-12-30
  • 打赏
  • 举报
回复
那就不要用正则不就好解决了!
yjgx007 2003-12-30
  • 打赏
  • 举报
回复
bencalie(Bencalie)
学习!!!
hmbory 2003-12-30
  • 打赏
  • 举报
回复
to bencalie:
如果字符串中有三个或更多一样的情况下就不行了:)

不过像你这种写法我还第一次看到!呵呵!先谢了!
shuangren 2003-12-30
  • 打赏
  • 举报
回复
强呀,我也以为不行,写了这个

<script>
var str = "604134a,604135b,604134c,604134a,604134d,604134e,604134c,604134d,604134e,";
var strArr = str.split(",");
var n = strArr.length;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(strArr[j] == strArr[i])strArr[j] = 0;
}
}
var myStr="";
for(i=0;i<n;i++)
{
if(strArr[i] != "" && strArr[i] != 0)
{
myStr += strArr[i];
myStr += ";";
}
}
alert(myStr);
</script>
加载更多回复(3)

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧