【问题标题】:using the "g" modifier in a regular expression AND for loop在正则表达式和 for 循环中使用 \"g\" 修饰符
【发布时间】:2023-02-21 10:29:54
【问题描述】:

问题:如果一个字符串超过 3 个字符,只返回前 3 个小写字符。如果字符串少于 3 个字符,则返回大写字母的字符串。

我知道这个问题可以用几种方式解释(a)将前 3 个字符转换为小写,但返回整个句子,(b)识别最初以小写形式书写的前 3 个字符并返回它们。我的解决方案基于选项 (b),但在我的正则表达式中使用“g”修饰符时确实出现了一个问题。如果我在 regExp 变量中写入 /[a-z]/g,那么结果会改变。在下面的示例中,它将返回“iei”而不是“ife”。我不知道为什么。想知道是否有人知道。

function newString(sentence){
  let regExp = /[a-z]/;
  let newStr = [];
  if(sentence.length > 3) {
    for(let i = 0; i < sentence.length; i++){ 
      if(regExp.test(sentence[i]) && newStr.length < 3){
        newStr.push(sentence[i]);  
      }    
    }
    return newStr.join(""); 
  } else {
    return sentence.toUpperCase();
  }
}
console.log(newString("Life is a gift"));

【问题讨论】:

  • 它确实返回了'if'......

标签: javascript regex


【解决方案1】:

“g”修饰符指定全局匹配。

全局匹配会找到所有匹配项(与仅第一个匹配项相比)。

https://www.w3schools.com/jsref/jsref_regexp_g.asp

但是对于这个例子,两种情况都应该有效。

【讨论】:

    猜你喜欢
    • 2011-11-09
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多