正则表达式负前瞻javascript
我的代码从文件中读取一行并替换长度为3到18位的数字 问题是我不想匹配字符串正则表达式负前瞻javascript,javascript,regex,Javascript,Regex,我的代码从文件中读取一行并替换长度为3到18位的数字 问题是我不想匹配字符串DOM:(冒号后的空格)后面的数字 例如: 匹配:tttt 23456789丹麦克朗 匹配:6783456789 DKD DOM: 不匹配:DOM:23456789 DKD 无匹配项:DHD DOM:23456789 DKD 不匹配:DOM:2789 DKD DOM:34567896 我尝试过使用消极的前瞻:*(?!DOM:)[0-9]{3,18} 但是它不起作用,请帮助。你不能,因为在javascript中没有look
DOM:
(冒号后的空格)后面的数字
例如:
匹配:tttt 23456789丹麦克朗
匹配:6783456789 DKD DOM:
不匹配:DOM:23456789 DKD
无匹配项:DHD DOM:23456789 DKD
不匹配:DOM:2789 DKD DOM:34567896
我尝试过使用消极的前瞻:*(?!DOM:)[0-9]{3,18}
但是它不起作用,请帮助。你不能,因为在javascript中没有lookback 解决方法是使用替换方法替换函数:
yourstr = yourstr.replace(/\b(DOM: )?\d{3,18}\b/g, function (m, g) {
return g ? m : 'what you want'; });
在不需要前瞻(此处不使用前瞻)的情况下,模拟后向的常用方法是通过反转。您可以反转输入字符串和正则表达式模式,在该模式中可以使用前向而不是后向,然后返回结果:
函数revStr(str){
返回str.split(“”).reverse().join(“”);
}
变量s=[“tttt 23456789 DKD”,“6783456789 DKD DOM:”,
“DOM:23456789 DKD”、“dhdhd DOM:23456789 DKD”、“DOM:2789 DKD DOM:34567896”];
var rex=/\b[0-9]{3,18}\b(?!\s*:MOD\b)/g;//用于匹配反向数的正则表达式
变量结果=[];//结果数组
s、 forEach(函数(t){//测试每个字符串
m=revStr(t).match(rex);//收集所有匹配项
如果(m){//如果我们有匹配
m、 forEach(函数(h){
results.push(revStr(h));//反转每个匹配值并添加
});
}
}
);
document.body.innerHTML=“+JSON.stringify(结果,0,4)+”代码>你正在寻找消极的回头看,JS还没有。谢谢,我会做一些类似于你建议的事情。谢谢你的回复