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