Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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_Php_Regex - Fatal编程技术网

JavaScript正则表达式未按预期替换

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重

我在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重写相同的函数,到目前为止,我有以下代码:

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);

@不管是谁,如果你投了反对票,请解释为什么。@不管是谁,如果你投了反对票,请解释为什么。啊!非常感谢,我一直在等待解释。
(?^)
是一个负前瞻,可以跳过起始字符变成大写。啊!非常感谢,我一直在等待解释。
(?^)
是一种负前瞻,可以跳过起始字符变成大写。