Javascript 替换分隔符之间的不匹配项
我有一个输入字符串: 123453244654,ffgv,87676988FF,87657 我很难使用正则表达式将字符串中不是五位数的所有项转换为常量34567。因此,输出如下所示: 1234534567345673456734567876763456787657 为此,我考虑了两种选择:Javascript 替换分隔符之间的不匹配项,javascript,regex,Javascript,Regex,我有一个输入字符串: 123453244654,ffgv,87676988FF,87657 我很难使用正则表达式将字符串中不是五位数的所有项转换为常量34567。因此,输出如下所示: 1234534567345673456734567876763456787657 为此,我考虑了两种选择: 求反字符类:不有用,因为它不直接在此表达式上执行,[^\d{5}], lookahead和lookahead:这里的问题是,在这个表达式的结果,(?!\d{5})或(?为了替换/替换的目的)中不包括不匹配的部
,[^\d{5}],
,(?!\d{5})
或(?为了替换/替换的目的)中不包括不匹配的部分
\1
,\2
)替换不匹配的零件
正则表达式工具中是否有任何机制可以实现上述示例中提到的输出
编辑:我非常感谢那些回答了非正则表达式解决方案的人,但如果您提供基于正则表达式的解决方案,我将更加感激。您不需要正则表达式。您可以使用
str.split
首先在逗号处拆分字符串,然后检查每个项目的长度是否大于或等于5,并且它只包含数字ts(使用str.isdigit
)。最后使用str.join
组合所有项目
>>> s = '12345,3244,654,ffgv,87676,988ff,87657'
>>> ','.join(x if len(x) >= 5 and x.isdigit() else '34567' for x in s.split(','))
'12345,34567,34567,34567,87676,34567,87657'
Javascript版本:
function isdigit(s){
for(var i=0; i <s.length; i++){
if(!(s[i] >= '0' && s[i] <= '9')){
return false;
}
}
return true;
}
arr = "12345,3244,654,ffgv,87676,988ff,87657".split(",");
for(var i=0; i < arr.length; i++){
if(arr[i].length < 5 || ! isdigit(arr[i])) arr[i] = '34567';
}
output = arr.join(",")
功能为数字{
对于(var i=0;i='0'&&s[i]我认为以下内容适用于长度不超过5个字母数字字符的值:
(,(?!\d{5})\w{1,5})
如果长度超过5个字母数字字符,则删除上述表达式中的5
:
(,(?!\d{5})\w{1,})
您可以使用以下方法替换:
,34567
当然,对于特定语言(python、perl或JS),也可能有更快的非正则表达式方法。尝试以下方法:/\b(?!\d{5})[^,]+\b/g
- 它约束单词边界之间的表达式(
\b
)
- 然后是非五位数(
!\d{5}
)的负前瞻
- 后跟
,
常量表达式=/\b(?!\d{5})[^,]+\b/g;
常量输入='123453244654,ffgv,87676988FF,87657';
预期输出常量='1234534567345673456734567876763456787657';
const output=input.replace(表达式“34567”);
log(output==expectedOutput,expectedOutput,output);
此方法使用/\b(\d{5})|(\w+)\b/g
:
- 我们在边界上匹配(
)\b
- 我们的第一个捕获组捕获“好字符串”
- 我们的松散捕获组获得剩余(坏字符串)
- 我们的
replacer()
const str='123453244654,ffgv,87676988ff,87657';
const STAND_IN='34567';
const massageString=(str)=>{
常量模式=/\b(\d{5})|(\w+)\b/g;
常量替换=(匹配、好字符串、坏字符串)=>{
if(goodstring){
返回goodstring;
}否则{
返回待机时间;
}
}
常量r=str.replace(模式,replace);
返回r;
};
控制台日志(消息传递(str))
那么,Python、JavaScript或Perl?您使用的是什么语言?@СС27:这个问题没有提到语言,正则表达式基本上是独立于语言的。如果要添加一个语言标记,它应该是OP提到的一个,并且只有一个,在某处…@Cerbrus如果Python被错误标记,我很抱歉。IMHO,正则表达式是从Perl演变而来。PHP是基于Perl的,就像Ruby上的RoR一样。我正在使用PHP后端的JavaScript进行工作。我目前正在重建网站,从繁重的服务器端查询执行转移到MVC框架。在PHP中,我在PHP中遇到了同样的问题,但我使用拆分函数和数组循环进行了工作。现在,它是JavaScript。但是Perl中的正则表达式可以很容易地适应任何语言。我认为Python是Perl的脚本姐妹,所以我可能已经为Python添加了标签。因此,您必须添加PHP
tag,这是一个您在开始时错过的标签。顺便说一句,RoR是Ruby framework,而PHP不是Perl framework。感谢您的建议。我已经重新标记了这个问题。很明显不过,OP希望在JavaScript中使用此功能。您是否可以在答案中添加JS解决方案?@Cerbrus也添加了JS解决方案。