JavaScript Regex没有按预期更换

时间:2016-09-03 06:08:25

标签: 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;
}

针对Manufacture's P/N投放时,输出为manufacturesPn

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

此时如果我输入Manufacture's P/N,则当前输出为Manufacture'SP/N

问题 如何更改我的JavaScript代码以复制PHP程序,以便为同一输入生成相同的输出?

3 个答案:

答案 0 :(得分:1)

您可以使用:



str = "Manufacture's  P/N";
    
console.log(
str.trim()
.toLowerCase()
.replace(/[^\da-z ]+/gi, '')
.replace(/(?!^)\b[a-z]/g, function(c) {
   return c.toUpperCase(); 
})
.replace(/\s+/g, '')
)
    
//=> "manufacturesPn"




在Javascript中你不应该引用正则表达式,例如"/[^\da-z ]/i"并使用全局标志来全局替换。

答案 1 :(得分:1)

您可以匹配.test()函数中.indexOf().replace()内的每个字符使用



var str = "Manufacture's  P/N";

var res = str.replace(/./g, function(p) {      
  return /[a-z]/i.test(p) && !/\s/.test(str[str.indexOf(p) - 1]) 
         ? p.toLowerCase() : /['/ ]/.test(p) ? "" : p
});

console.log(res);




答案 2 :(得分:1)

请试一试。

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