如何使用 Node js 将变量传递到正则表达式?

问题描述 投票:0回答:4

所以基本上,我有一个正则表达式是

var regex1 = /10661\" class=\"fauxBlockLink-linkRow u-concealed\">([\s\S]*?)<\/a>/;

var result=text.match(regex1);
user_activity = result[1].replace(/\s/g, "")
console.log(user_activity);

我想做的是这个

var number = 1234;
var regex1 = /${number}\" class=\"fauxBlockLink-linkRow u-concealed\">([\s\S]*?)<\/a>/;

但它不起作用,当我尝试使用 RegExp 时,我不断收到错误。

javascript html node.js regex variables
4个回答
1
投票

您可以使用

RegExp
从字符串创建正则表达式并使用该字符串中的变量。

var number = 1234;
var regex1 = new RegExp(`${number}aa`);

console.log("1234aa".match(regex1));


0
投票

您可以使用模板和/或字符串添加来构建正则表达式字符串,然后将其传递给

RegExp
构造函数。 这样做的一个关键是获得正确的转义,因为您需要对反斜杠进行额外级别的转义,因为字符串的解释需要一层反斜杠,但是当它到达 RegExp 构造函数时,您需要一层才能生存。 这是一个工作示例:

function match(number, str) {
    let r = new RegExp(`${number}" class="fauxBlockLink-linkRow u-concealed">([\\s\\S]*?)<\\/a>`);
    return str.match(r);
}


const exampleHTML = '<a href="something" class="aaa1234" class="fauxBlockLink-linkRow u-concealed">Some link text</a>';

console.log(match(1234, exampleHTML));

注意,像这样使用正则表达式来匹配 HTML 变得非常顺序敏感(而 HTML 本身并不顺序敏感)。 而且,您的正则表达式要求类之间恰好有一个空格,而 HTML 则不需要。 如果

<a>
标签中类名称的顺序略有不同或间距不同,则它将不匹配。 根据您真正想要执行的操作,可能有更好的方法来解析和使用不区分顺序的 HTML。


0
投票

我用Adem的方法解决了,

function escapeRegExp(string) {
    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}


var number = 1234; 

var firstPart = `<a href="/forum/search/member?user_id=${number}" class="fauxBlockLink-linkRow u-concealed">`

var regexpString = escapeRegExp(firstPart) + '([\\s\\S]*?)' + escapeRegExp('</a>');

console.log(regexpString)


var sample = `<a href="/forum/search/member?user_id=1234" class="fauxBlockLink-linkRow u-concealed"> </a>`

var regex1 = new RegExp(regexpString); 

console.log(sample.match(regex1));

首先,问题实际上是我读取文件的方式,我应用匹配的数据是未定义的。


0
投票

非常混乱...

示例:

const preword = "Things"
let rx = new RegExp( String.raw`${preword}:\[(.*)\]` )

结果正则表达式

/Things:\[(.*)\]/
  • 你需要 String.raw ,否则转义就会陷入困境

  • 请勿包含开头/结尾的“/”

© www.soinside.com 2019 - 2024. All rights reserved.