Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式负前瞻javascript_Javascript_Regex - Fatal编程技术网

正则表达式负前瞻javascript

正则表达式负前瞻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

我的代码从文件中读取一行并替换长度为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中没有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还没有。谢谢,我会做一些类似于你建议的事情。谢谢你的回复