所以基本上,我有一个正则表达式是
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 时,我不断收到错误。
您可以使用
RegExp
从字符串创建正则表达式并使用该字符串中的变量。
var number = 1234;
var regex1 = new RegExp(`${number}aa`);
console.log("1234aa".match(regex1));
您可以使用模板和/或字符串添加来构建正则表达式字符串,然后将其传递给
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。
我用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));
首先,问题实际上是我读取文件的方式,我应用匹配的数据是未定义的。
示例:
const preword = "Things"
let rx = new RegExp( String.raw`${preword}:\[(.*)\]` )
结果正则表达式
/Things:\[(.*)\]/
你需要 String.raw ,否则转义就会陷入困境
请勿包含开头/结尾的“/”