【问题标题】:Transform a string to a regex in JavaScript [duplicate]在 JavaScript 中将字符串转换为正则表达式 [重复]
【发布时间】:2019-11-24 13:34:56
【问题描述】:

我希望在输入“hello”、“Hello”、“HELLO”等时为文本着色

<input id="input" type="input" value="hello"/>
<span id="result">Hello</span>

<script>   
var input = document.getElementById('input');
var result = document.getElementById('result');
function greenTheTitle(){

        result.style.color = 'green';
    }
function redTheTitle(){

        result.style.color = 'red';
    }

input.addEventListener('keyup', function goodMrn(){
    var inputValue = input.value;
    if(inputValue == /hello/i ){ //does'nt work here
            greenTheTitle();
        }
if(inputValue != /hello/i ){ //and here
            redTheTitle();
        }});    
</script>   

  </body>
</html>

if(inputValue == "hello" ) 有效 但 if(inputValue == /hello/i ) 没有

【问题讨论】:

  • 字符串不是正则表达式,所以你不能像那样使用== 运算符
  • 你很可能想要像/hello/i.test(inputValue)这样的东西
  • 谢谢迪恩·泰勒,它有效:)

标签: javascript regex


【解决方案1】:

您无法根据 RegEx 检查字符串的相等性。 RegEx 是表示模式的对象,它不是字符串,不会强制执行您的想法。 (自己尝试一下:打开你的开发者控制台并输入/hello/i.toString(),你会得到一个字符串形式的模式,“/hello/i”,它与输入的值不匹配。)

您应该做的是使用正则表达式testmatch 函数。由于在这种情况下,您不需要查找匹配的部分,您可以使用test,如果字符串在某处匹配则返回 true,否则返回 false。

if (/hello/i.test(inputValue)) { /* ... */ }

请注意,这也将匹配输入中任何位置的字符串“hello”,因此它将匹配“well hello there”、“dsjnbdjkasbdjhellojbasdjhsbja”等。您可以通过在开头和结尾锚定正则表达式来解决此问题,像这样:

if (/^hello$/i.test(inputValue)) { /* ... */ }

这意味着“字符串以 (^) hello 开头,然后以 ($) 结尾”。或者,如果您想要的只是不区分大小写,那么也许您甚至不需要在这里使用 RegEx。您可以将输入设为小写并与小写字符串进行比较:

if (inputValue.toLowerCase() === 'hello') { /* ... */ }

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 2019-12-24
    • 2016-08-13
    • 1970-01-01
    • 2023-03-23
    • 2012-01-28
    • 2022-11-18
    • 2023-03-11
    相关资源
    最近更新 更多