在某些情况下,替换字符串失败

时间:2019-01-22 09:26:22

标签: javascript regex

我必须检查一个字符串并替换其中的一些内容。

我必须检查

$mystring='abc...';

具有以下值之一px,em,%,vh,s

我用它来检查字符串

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

它可以工作,但在某些情况下会产生错误。

例如,如果我在字符串中输入

$mystring="its embeded"

该函数将替换原来不应该的“ s”和“ em”。

该函数应检查mystring是否为

only a number+px
or only a number+em
or only a number+%
or only a number+vh
or only a number+s

如果存在匹配项,则该函数应替换textpart,在所有其他情况下,该函数不应执行任何操作。

是否可以创建这种功能,以及替换代码的样式如何?

非常感谢。

更新

基于我尝试更改的answears

var input="0s";
function replaceUnit(input)
{ 
  console.log('check: '+input); 
  var test=input.replace(/(\d)(?:px|em|%|vh|s)$/i ,''); 
  console.log('->: '+test); 
  return test  
}

控制台中的结果是

check: 0s 
->: 

1 个答案:

答案 0 :(得分:3)

在正则表达式的末尾添加一个$(字符串末尾的锚),以确保仅当字符出现在末尾时才匹配,并在这些字符之前捕获一个数字,这样您就可以单独替换为该数字(从而删除多余的字符):

return input.replace(/(\d)(?:px|em|%|vh|s)$/i ,'$1')

https://regex101.com/r/IodB6z/1