querySelectorAll正则表达式带变量

时间:2019-06-14 14:37:05

标签: javascript regex

我需要将元素与具有两个变量行,站点的attrib字符串匹配。该属性是“数据测试”。格式是

data-test =“ siteQtySOMETEXTrow = xxSOMETEXTsite = yySOMETEXT

我认为最简单的方法是使用正则表达式,使用新的RegExp

我遇到了2个问题:1)构建正则表达式,以及2)将正则表达式传递给querySelectorAll

$ENV{HOME}

我认为我已经找到解决方案的大部分方法,但是它没有用。

是正则表达式吗?还是将正则表达式传递到查询中?还是其他?

2 个答案:

答案 0 :(得分:0)

我的猜测是,我们希望从字符串中捕获三个变量,为此,我们将简单地使用具有三个组的表达式,就像这样:

^siteQty(.+?)row=(.+?)site=(.*)$

,我们将编写剩下的问题脚本。

我们可能会替换这些组(.+?),并在必要时添加其他边界。

Demo 1

示例

const regex = /siteQty(.+?)row=(.+?)site=(.*)/gm;
const str = `siteQtySOMETEXTrow=xxSOMETEXTsite=yySOMETEXT

`;
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}`);
    });
}

布尔匹配

console.log(/^siteQty(.+?)row=(.+?)site=(.*)$/.test('siteQtySOMETEXTrow=xxSOMETEXTsite=yySOMETEXT'));

要捕获值输入中的小写和大写字母,我们可以使用例如以下表达式:

^siteQty(.+?)row=(([a-z]+)([A-Z]+?))site=(([a-z]+)([A-Z]+))$
^siteQty(.+?)row=(([a-z]+)([A-Z]+))site=(([a-z]+)([A-Z]+))$

const regex = /^siteQty(.+?)row=(([a-z]+)([A-Z]+?))site=(([a-z]+)([A-Z]+))$/gm;
const str = `siteQtySOMETEXTrow=xxSOMETEXTsite=yySOMETEXT
 siteQtySOMETEXTrow=xxSOMETEXTsite=yySOMETEXT
iteQtySOMETEXTrow=xxSOMETEXTsite=yySOMETEXT

`;
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

答案 1 :(得分:0)

因此,最终我为行和列设置了带有虚拟占位符的字符串,然后使用字符串函数替换了虚拟xx / yy值。然后将所有三个选择器放入querySelectorAll

      var myq_col = "[data-test*='site=xx']" ;
      var myq_col = myq_col.replace("xx",window.myred_col);
      var myq_row = "[data-test*='row=xx']" ;
      var myq_row = myq_row.replace("xx",window.myred_row);
      var myq_site = "[data-test^='siteQty']" ;
      console.log(" removing red @ ",myq_col + "|" + myq_row);

            var myadd= document.querySelectorAll(myq_site+myq_col+myq_row);