JavaScript正则表达式未按预期替换
我在PHP中有这个函数:JavaScript正则表达式未按预期替换,javascript,php,regex,Javascript,Php,Regex,我在PHP中有这个函数: function sanitizeKey($str){ $str = strtolower($str); $str = preg_replace('/[^\da-z ]/i', '', trim(ucwords($str))); $str = str_replace(" ", "", $str); $str = lcfirst($str); return $str; } 当针对制造商的p/N运行时,输出为制造商SPN 我正在用Javascript重
function sanitizeKey($str){
$str = strtolower($str);
$str = preg_replace('/[^\da-z ]/i', '', trim(ucwords($str)));
$str = str_replace(" ", "", $str);
$str = lcfirst($str);
return $str;
}
当针对制造商的p/N
运行时,输出为制造商SPN
我正在用Javascript重写相同的函数,到目前为止,我有以下代码:
str = "Manufacture's P/N";
str = str.toLowerCase()
.replace(/\b[a-z]/g, function(letter) { // php's ucwords
return letter.toUpperCase();
});
str = str.trim(); // remove leading & trailing whitespace
str = str.replace("/[^\da-z ]/i", ''); // keep alphanumeric
str = str.replace(/\s+/g, ''); // remove whitespace
str = str.replace(/\b[a-z]/g, function(letter) { // php's lcfirst
return letter.toLowerCase();
});
console.log(str);
此时,如果输入制造商的p/N
,则当前输出为制造商的SP/N
问题
如何更改JavaScript代码以复制PHP程序,使其为相同的输入生成相同的输出?您可以使用:
str=“制造商的P/N”;
console.log(
特里姆街()
.toLowerCase()
.替换(/[^\da-z]+/gi')
.替换(/(?!^)\b[a-z]/g,函数(c){
返回c.toUpperCase();
})
.替换(/\s+/g')
)
//=>“manufacturesPn”
您可以使用:
str=“制造商的P/N”;
console.log(
特里姆街()
.toLowerCase()
.替换(/[^\da-z]+/gi')
.替换(/(?!^)\b[a-z]/g,函数(c){
返回c.toUpperCase();
})
.替换(/\s+/g')
)
//=>“manufacturesPn”
您可以使用函数中的.test()
,.indexOf()
匹配每个字符
var str=“制造商的P/N”;
var res=str.replace(//g,函数(p){
return/[a-z]/i.test(p)和&!/\s/.test(str[str.indexOf(p)-1])
?p.toLowerCase():/['/]/.test(p)?“”:p
});
控制台日志(res)
您可以使用函数中的.test()
,.indexOf()
匹配每个字符
var str=“制造商的P/N”;
var res=str.replace(//g,函数(p){
return/[a-z]/i.test(p)和&!/\s/.test(str[str.indexOf(p)-1])
?p.toLowerCase():/['/]/.test(p)?“”:p
});
控制台日志(res)代码>请尝试此操作
str = "Manufacture's P/N";
str = $.trim(str).split(" ");
str1 = str[0].toLowerCase().replace("'", '');
str2 = str[1].toLowerCase().replace("/", '');
str3 = str2.charAt(0).toUpperCase() + str2.slice(1);
finalString = str1 + str3;
return finalString;
console.log(finalString);
请试试这个
str = "Manufacture's P/N";
str = $.trim(str).split(" ");
str1 = str[0].toLowerCase().replace("'", '');
str2 = str[1].toLowerCase().replace("/", '');
str3 = str2.charAt(0).toUpperCase() + str2.slice(1);
finalString = str1 + str3;
return finalString;
console.log(finalString);
@不管是谁,如果你投了反对票,请解释为什么。@不管是谁,如果你投了反对票,请解释为什么。啊!非常感谢,我一直在等待解释。(?^)
是一个负前瞻,可以跳过起始字符变成大写。啊!非常感谢,我一直在等待解释。(?^)
是一种负前瞻,可以跳过起始字符变成大写。