进行简单的搜索,而不管大小写如何

时间:2019-01-18 17:46:39

标签: javascript

有人可以向我解释一下,如何在javascript中完成这个简单的代码,而无需考虑大小写吗?

if(res.search('em')!=-1){  unit='em'; res.replace(unit,'');}
if(res.search('vh')!=-1){  unit='vh'; res.replace(unit,'');}
if(res.search('px')!=-1){  unit='px'; res.replace(unit,'');}

毫无疑问,这就是我编写的代码。很多代码

if(res.search('Em')!=-1){  unit='Em'; res.replace(unit,'');}
if(res.search('eM')!=-1){  unit='eM'; res.replace(unit,'');}
if(res.search('EM')!=-1){  unit='EM'; res.replace(unit,'');}
...

我确定有更好的方法来做到这一点!?

非常感谢。

5 个答案:

答案 0 :(得分:1)

您可以将正则表达式与replace一起使用,并将找到的单位保存为replacer函数的副作用。这样一来,您无需两次搜索字符串即可替换单元:

let res = "Value of 200Em etc."
let unit
let newRes = res.replace(/(em|vh|px)/i, (found) => {unit = found.toLowerCase(); return ''})

console.log("replaced:", newRes, "Found Unit:", unit)

答案 1 :(得分:0)

您可以使用toLowerCase(),将所有字符串转换为小写并进行比较,

var tobereplaced = 'em';

if(res.search.toLowerCase(tobereplaced)> -1){   res.replace(tobereplaced,'');}

答案 2 :(得分:0)

对于第一部分,您可以使用toLowerCase()

if(res.toLowerCase().search('em') != -1)

您可以在不区分大小写的标志旁边的正则表达式中使用交替显示。

/(em|vh|px)/i Mathces emvhpx

function replaceUnit(input){
  return input.replace(/(em|px|vh)/i ,'replaced')
}

console.log(replaceUnit('height: 20em'))
console.log(replaceUnit('width:=20Em'))
console.log(replaceUnit('border-radius: 2Px'))
console.log(replaceUnit('unit=pX'))
console.log(replaceUnit('max-height=20Vh'))

答案 3 :(得分:0)

您需要做的就是在测试字符串内容之前将其强制为小写(或大写):

if( res.toLowerCase().search('em') !== -1){ do(stuff); }

要处理替换res中的实际子字符串值,应执行以下操作:

let caseInsensitiveUnit = "em";
let unitLength;
let actualUnit;
let position = res.toLowerCase().search(caseInsensitiveUnit);
if(position > -1){ 
    unitLength = caseInsensitiveUnit.length; 
    actualUnit = res.substring(postion, position + unitLength);
    res.replace(actualUnit, "");
}

答案 4 :(得分:0)

如果您可以做出以下三个假设:

  1. 字符串始终以数字开头
  2. 字符串始终以单位结尾
  3. 单位始终是两个字符

然后它可能很简单:

const str = '11.5px';
const unit = str.substr(-2); //=> 'px'
const value = parseFloat(str, 10); //=> 11.5

或具有功能:

const parse = str => ({unit: str.substr(-2), value: parseFloat(str, 10)});
const {unit, value} = parse('11.5px');
// unit='px', value=11.5