动态创建RegExp
对象
有些情况下,你无法在编写代码时准确知道需要匹配的模式。假设你想寻找文本片段中的用户名,并使用下划线字符将其包裹起来使其更显眼。由于你只有在程序运行时才知道姓名,因此你无法使用基于斜杠的记法。
但你可以构建一个字符串,并使用RegExp
构造器根据该字符串构造正则表达式对象。
这里给出一个示例。
let name = "harry";
let text = "Harry is a suspicious character.";
let regexp = new RegExp("\\b(" + name + ")\\b", "gi");
console.log(text.replace(regexp, "_$1_"));
// → _Harry_ is a suspicious character.
由于我们创建正则表达式时使用的是普通字符串,而非使用斜杠包围的正则表达式,因此如果想创建\b
边界,我们不得不使用两个反斜杠。RegExp
构造器的第二个参数包含了正则表达式选项。在本例中,"gi"
表示全局和不区分大小写。
但由于我们的用户是怪异的青少年,如果用户将名字设定为"dea+hl[]rd"
,将会发生什么?这将会导致正则表达式变得没有意义,无法匹配用户名。
为了能够处理这种情况,我们可以在任何有特殊含义的字符前添加反斜杠。
let name = "dea+hl[]rd";
let text = "This dea+hl[]rd guy is super annoying.";
let escaped = name.replace(/[^\w\s]/g, "\\$&");
let regexp = new RegExp("\\b(" + escaped + ")\\b", "gi");
console.log(text.replace(regexp, "_><_"));
// → This _dea+hl[]rd_ guy is super annoying.
当前内容版权归 wizardforcel 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 wizardforcel .