【问题标题】:Using regex to find substring inside another substring [closed]使用正则表达式在另一个子字符串中查找子字符串 [关闭]
【发布时间】:2019-05-31 17:02:21
【问题描述】:

使用正则表达式,如何在另一个字符串(子字符串)中检查字符串(子字符串)的任何部分? 例如:

str1 = "li_xxxyyy" 
str2 = "123xxxyyy"

我需要对字符串的 xxxyyy 变量部分做出真实响应。

我正在寻找在 str2 的 any 部分中找到的 str1 的 any 部分

【问题讨论】:

  • 部分是什么意思,由_分隔的字符串?
  • str1="abcxy"; str2="123yx"; 的结果应该是什么?
  • function matchAny(str1, str2, flags){ return str2.match(new RegExp(str1.split('').join('|'), flags)); } console.log(matchAny('li_xxxyyy', '123xxxyyy', 'ig').join(''));

标签: javascript regex regex-group


【解决方案1】:

我猜在这里我们只想在我们想要的输出周围使用一个捕获组,这可能会解决我们的问题,使用一个简单的表达式,例如:

const regex = /(xxxyyy)/gm;
const str = `li_xxxyyy
123xxxyyy
123xxxyyy123xxxyyy
123xxxyyy123`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Demo

【讨论】:

    【解决方案2】:

    同样,str1 的任何部分都可以在 str2 的任何部分中找到

    您不需要 regex tbh,只使用常规字符串操作会更简单、更快捷:

    let shareCommonSubstring = (str1, str2) => [...str2].some(c2 => str1.includes(c2));
    
    let test = (str1, str2) => console.log(str1, str2, shareCommonSubstring(str1, str2));
    test('xyz', 'abc'); // false
    test('xyz', 'abcx'); // true
    test('axyz', 'abc'); // true

    但如果你坚持使用正则表达式:

    let shareCommonSubstring = (str1, str2) => !!str1.match(new RegExp(`[${str2}]`));
    
    let test = (str1, str2) => console.log(str1, str2, shareCommonSubstring(str1, str2));
    test('xyz', 'abc'); // false
    test('xyz', 'abcx'); // true
    test('axyz', 'abc'); // true

    【讨论】:

      【解决方案3】:

      你可以这样检查:

      var subString = 'Hello';
      var string = 'Hello World'
      var isSubstring = new RegExp(subString).test(string);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多