RegExp在parens中捕获字符串时未按预期工作
RegExp not working as expected capturing strings within parens
我正在处理一个问题,在这个问题中,我得到了一个包含多组括号的字符串。
前任。"(024025026027028),(029030031032033)"
当我得到字符串时,我有一个变量,里面有一个字符串,比如"030"。我创建了一个这样的正则表达式:
var re = new RegExp(".*?''((.*?" + id + ".*?)'').*");
并进行如下替换:
string.replace(re, "$1");
所以问题是,如果数字落在第一组括号内,那么它会正常工作,但如果它落在第二组括号内则不会。
所以:
var id = "024";
var re = new RegExp(".*?''((.*?" + id + ".*?)'').*");
var string = "(024,025,026,027,028),(029,030,031,032,033)";
document.writeln(string.replace(re, "$1"));
返回"024025026027028"
但是:
var id = "029";
var re = new RegExp(".*?''((.*?" + id + ".*?)'').*");
var string = "(024,025,026,027,028),(029,030,031,032,033)";
document.writeln(string.replace(re, "$1"));
返回:"024025026027028),(029030031032033"
我指定?
是为了尽量减少在parens之间捕获的内容,但它似乎不起作用。有人能解释一下我缺了什么吗?
这是一个JSFiddlehttp://jsfiddle.net/rdwAP/#&togetherjs=xVQ7Ltd8rO
当您想从字符串中提取数据时,通常是个好主意
- 避免模糊、包罗万象或否定的模式
- 使用
match
而不是replace
它更干净、更明确、更快。
这里应该使用('d+,)*
和(,'d+)*
,而不是仅使用.*?
。
var id = "029";
var re = new RegExp("''(((''d+,)*" + id + "(,''d+)*)'')");
var string = "(024,025,026,027,028),(029,030,031,032,033)";
document.writeln(string.match(re)[1]);
请注意,在垃圾输入的情况下,这个显式正则表达式也会失败,这通常被认为是一个优点。
不要在正则表达式中使用.*?
,而是使用否定模式:
var id = "029";
var re = new RegExp("''(([^)]*" + id + "[^)]*)'')");
var string = "(024,025,026,027,028),(029,030,031,032,033)";
string.replace(re, "$1");
//=> "(024,025,026,027,028),029,030,031,032,033"
([^)]*
将匹配任何非)
的字符中的0个或多个,从而在获得)
时停止匹配- 而当您有
.*?
时,它将匹配,直到它找到存在于(...)
的第二集中的id
变量
相关文章:
- 为什么不是'当试图使用Ajax和外部PHP文件发布内容时,我的表单工作不正常,该文件接收两个字符串
- RegExp在parens中捕获字符串时未按预期工作
- 字符串替换不'当通过android webView JavascriptInterface传递字符串时无法工作
- JavaScript如何面对字符串数字工作
- 如何正确创建带有“Url.Action”的查询字符串的网址,以便它在Firefox中工作
- JavaScript 警报函数如何在 Web 浏览器上的 java 字符串变量中工作
- 字符串包在 Firefox 25 中的工作方式不同
- 阻止某些链接(包含某些字符串的 href)工作
- 没有字符串的JavaScript concat函数无法正常工作
- JavaScript中的字符串替换无法正常工作
- JavaScript onclick 函数在参数为整数而不是字符串时工作
- Javascript:将字符串视为数组在本地工作,但不部署在IE中
- 如何通过 webhook 将 json 格式的字符串作为有效负载传递给 iron.io 工作线程
- 如何让多个元素与jQuerys一起工作 没有.冲突();字符串
- 用于将值从复选框传递到查询字符串的 JavaScript 无法正常工作
- 如何从字符串创建 Web 工作线程
- 符号:隐式字符串转换如何在 JavaScript 中工作
- 为什么对于可被10整除的数字,字符串到int之间的转换不能像预期的那样工作
- Selenium分割日期字符串的工作示例
- 如果请求的字符串包含引号,为什么encodeURIComponent不工作