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

Javascript 在某些情况下,替换字符串失败,javascript,regex,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

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

我得检查一下

$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,在所有其他情况下,该函数不应执行任何操作

是否有可能创建一种此函数,以及替换代码必须是什么

非常感谢

更新

基于其中一个答案,我试图改变它

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 
->: 
在正则表达式的末尾添加一个
$
(字符串结尾锚定),以确保它仅在字符出现在最末尾时匹配,并在这些字符之前捕获一个数字,以便您可以单独替换为该数字(从而去掉多余的字符):

在正则表达式的末尾添加一个
$
(字符串结束锚定),以确保它仅在字符出现在最末尾时匹配,并捕获这些字符之前的一个数字,以便您可以单独替换为该数字(从而去掉多余的字符):


/[0-9]+/(px | em |%| vh | s)/
/(px | em |%| vh | s)$/
应工作请单击然后单击
[]
代码段编辑器,并生成一个包含实际示例和预期输出的代码,如果您只需使用
parseInt()
parseFloat()
。如果字符串以数值开头,它将修剪结尾的非数字字符
/[0-9]+/(px | em |%| vh | s)/
/(px | em |%| vh | s)$/
应执行的操作请单击
[]
代码段编辑器,并生成一个包含实际示例和预期输出的代码,如果要替换该单元,请使用
parseInt()
parseFloat()
。如果字符串以数值开头,它将首先修剪结尾的非数字字符SAT,非常感谢您的帮助。我用您的代码“input.replace(/(\d)(?:px | em |%| vh | s)$/I,”)进行了尝试,但它删除了“0s”的数字,我得到了一个空结果!?无法复制,它会导致
0
对于我,请发布一条消息,如果它似乎在删除数字,那么我们可以看到问题所在并尝试调试它。我已经用我的代码更新了我的帖子,请看一看我回答中的代码-它不是用空字符串替换,而是用第一个捕获的组替换(如本文所述,使用数字)-首先使用
“$1”
,而不是
,非常感谢您的帮助。我尝试使用您的“代码”输入。替换(/(\d)(?:px | em | | | s)$/I.),但在我的“0s”情况下它会删除该数字我得到一个空结果!?无法复制,它会导致
0
对于我来说,请发布一个如果它似乎在删除数字,那么我们可以看到问题所在并尝试调试它。我已经用我的代码更新了我的帖子,请看一看我回答中的代码-它不是用空字符串替换,而是用第一个捕获的gro替换向上(如本文所述,使用数字)-使用
'$1'
,而不是
'
return input.replace(/(\d)(?:px|em|%|vh|s)$/i ,'$1')