【问题标题】:Regex to match any character from particular string正则表达式匹配来自特定字符串的任何字符
【发布时间】:2019-12-25 21:09:59
【问题描述】:

基本上,我试图查看名称的字符是否按顺序出现在字符串的字符中。

'Across the rivers', 'chris' => true 因为:

'A crew that boards the ship', 'chris' => false 因为:

我有这个:

function nameInStr(str, name){
    let stringArray = Array.from(str);
    let testName = "";
    for (let i = 0; i < stringArray.length; i++) {
        if (stringArray[i].match(/any character from name/)) {
            testName += stringArray[i];
        }
    }
    if (testName === name) {
        return true;
    }
    else {
        return false;
    }
}

console.log(nameInStr('Across the rivers', 'chris'));

但正如您所见,我不知道如何测试单个字符何时与name 中的任何字符匹配。有没有一种简单的方法可以用正则表达式做到这一点?

编辑 - 测试新方法

function nameInStr(str, name){
    let nameregex = new RegExp(".*" + name.split("").join(".*") + ".*");
    return str.test(nameregex);
}

console.log(nameInStr('Across the rivers', 'chris'));

【问题讨论】:

  • 基本上,您希望将搜索到的文本“abc”转换为正则表达式a.*b.*c(尽管这不是最有效的解决方案)

标签: javascript arrays regex string


【解决方案1】:

把名字变成一个正则表达式:

let nameregex = new RegExp(".*" + name.split("").join(".*") + ".*");

那么你只需要测试:

return nameregex.test(str);

为了避免名称中正则表达式元字符的潜在问题,它必须变得更花哨。

【讨论】:

  • 嗯,当我尝试这样做时,我得到了一个TypeError: str.test is not a function....参见上面的编辑。
  • @Pac0 与 .isMatch() 的结果相同 - TypeError: str.isMatch is not a function
  • @HappyHands31 对,对不起,我把它弄反了,等等。 ...现在修复
  • @HappyHands31 呵呵,语言错误,对不起,我删除了我上面的评论
  • @HappyHands31 请注意说明中的最后一条评论:测试应该不区分大小写。因此new RegExp() 调用需要"i" 作为第二个参数。
【解决方案2】:

简单的解决方案:

将您的搜索词更改为每个字符之间带有.* 的正则表达式。

例如,"chris" -> "c.*h.*r.*i.*s"

【讨论】:

    【解决方案3】:

    试试

    let re = new RegExp([..."chris"].join`.*`);
    
    console.log( re.test('Across the rivers') );
    console.log( re.test('A crew that boards the ship') );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2013-08-02
      • 1970-01-01
      相关资源
      最近更新 更多