javascript - 带有变量的javascript RexEx没有产生预期的结果
问题描述
我正在尝试更新一个使用正则表达式检测诸如 ts-english、ts-german、ts-italian 之类的值的项目。此代码产生
var str = "ts-english";
let patt = /(?<=ts\-)\S+/i;
var res = patt.exec(str);
console.log (res)
输出:['english',索引:3,输入:'ts-english',组:未定义]
我希望能够在 for 循环中为 ts-1-english 做一些事情。我知道我应该在循环的每次迭代期间使用 RegEx 设置变量。
var str = "ts-1-english";
for (q=1; q <= 3; q++){
var mpatt = new RegExp ("/(?<=ts\\-" + q + "\\-)\\S+/i")
console.log (mpatt)
var res = mpatt.exec(str);
console.log ("q: " + (q) + " result of test: " + res)
}
这是我的输出。
//(?<=ts-1-)\S+/i/ q: 1 测试结果: null
//(?<=ts-2-)\S+/i/ q: 2 测试结果: null
//(?<=ts-3-)\S+/i/ q: 3 测试结果: null
解决方案
您的代码的问题在于,当您使用 时new RegExp
,您应该传递要构造的纯正则表达式/
,不带分隔符,也不带标志。要使用标志,请在第二个参数中传递它们,例如:
new RegExp ("(?<=ts\\-" + q + "\\-)\\S+", 'i');
但是在可能的情况下使用正则表达式文字要容易得多;除其他外,您不必双重转义反斜杠。而且,在这种情况下,这是可能的。除了使用循环之外,您还可以使用与 、 或在所需点匹配的字符1
集2
,3
其中[1-3]
:
const str = "ts-1-english";
const mpatt = /(?<=ts-[1-3]-)\S+/i;
const res = mpatt.exec(str);
console.log(res)
另请注意,Javascript 中的lookbehind 并未得到广泛支持。您可以考虑将 group 用于要提取的部分:
const str = "ts-1-english";
const mpatt = /ts-[1-3]-(\S+)/i;
const res = mpatt.exec(str);
console.log(res);
推荐阅读
- python - 无法在 Gtk.TextView i Python 3 中对列进行排序
- javascript - 在数组中使用切片不会影响模板
- git - 如何恢复当前 git 提交的文件
- iphone - 如何使用蓝牙串行配置文件将串行数据发送到 Mac
- postgresql - 根据一个值删除重复项
- java - 使用堆的最佳优先搜索实现
- google-app-maker - Google App Maker:外部 JavaScript 库
- php - 将生成的字符串用于 MySQL 中带有变量的数组
- c# - Razor 标记在一行上返回一些元素,在同一行上返回其他元素,没有空格
- regex - 在 PDF 中查找一个单词,然后在该单词之后返回 11 个字符?