【发布时间】:2014-07-22 13:55:59
【问题描述】:
我知道关于正则表达式中的变量有很多问题。其中一些例如:
- concat variable in regexp pattern
- Variables in regexp
- How to properly escape characters in regexp
- Matching string using variable in regular expression with $ and ^
不幸的是,他们都没有详细解释如何逃避我的 RegExp。
假设我想查找前面有这个字符串的所有文件:
file:///storage/sdcard0/
我用正则表达式试过这个:
(?:file:\/\/\/storage\/sdcard0\(.*))(?:\"|\')
在某些 json 文件中正确获取了我的 image1.jpg 和 image2.jpg。 (尝试使用http://regex101.com/#javascript)
在我的一生中,我无法让它在 JS 中工作。我知道你应该使用RegExp 来解决这个问题,但我遇到了问题。
var findStr = "file:///storage/sdcard0/";
var regex = "(?:"+ findStr +"(.*))(?:\"|\')";
var re = new RegExp(regex,"g");
var result = <mySearchStringVariable>.match(re);
有了这个我得到 1 个结果,它是错误的(一堆文本)。我认为我应该像网络上所说的那样逃避这个。我试图用下面的两个函数逃避 findStr,结果是一样的。所以我想好吧,我也需要在正则表达式中转义一些字符。
我试图手动转义它们,结果没有匹配。
我尝试在将整个正则表达式变量传递给 RegExp 构造函数之前对其进行转义,结果是相同的:没有匹配项。
function quote(regex) {
return regex.replace(/([()[{*+.$^\\|?])/g, '\\$1');
}
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
请问我到底做错了什么?
有没有关于如何编写带有变量的 RegExp 的好的文档?
【问题讨论】:
-
为什么要在模式末尾包含引号字符?这对我来说没有意义。
-
引号是我匹配的结束字符,我想停止匹配的点..
-
实际上你的正则表达式对我来说效果很好。您将不得不发布更多详细信息。
-
当我执行
"foo bar file:///storage/sdcard0/'".match(re)时,我得到了正确的结果,换句话说 - 只是文件 URL 而不是“foo bar”。 -
啊啊啊——我想通了!!我需要将 LAZY 与 (.*?) 一起使用,这该死的以前从未想过
标签: javascript regex string