我写以提取由引号(“)。我用jQuery中下面的语句来得到它。正则表达式是不允许“并允许”
var item = objstr.match(/\"(([^\"])*)\"/g);
包围字符串,但我想打一个\“的例外情况被允许。
我写以提取由引号(“)。我用jQuery中下面的语句来得到它。正则表达式是不允许“并允许”
var item = objstr.match(/\"(([^\"])*)\"/g);
包围字符串,但我想打一个\“的例外情况被允许。
此正则表达式可能工作为好,不使用查找aheads或查找屁股:(!空格去掉)
/" (\\\\ | \\" | [^"])* "/
阅读:从双引号匹配字符串以双引号。在这两者之间可能有或没有逃脱反斜杠\\
的任意组合,逃脱双引号\"
或任何非引号字符。这允许输入像
"abc\\abc\abc\"abc\\\"abc"
是有效的,但不是
"abc\\"abc"
// ^String terminates here
你可能想,如果你的字符串可能有转义意义\"
。
从@nickb答案不具有此特性/错误,无论你怎么称呼它。两个字符串在他的正则表达式中都是有效的。
如果您的正则表达式引擎能够关闭回溯,这是使用它的时间。在Perl中,我必须添加一个+
的量词(或转向深奥的分支重置)。我不知道你需要什么。
/" (\\\\ | \\" | [^"])*+ "/
我们也希望贪婪行为,所以没有*?
结构。
我从http://writecodeonline.com/javascript/测试下面的代码:
var s = "wwww\"ooxx\\\"xyz\"";
var foo = s.match(/"(?:[^\\"]|\\.)*"/);
document.write(foo[0]);
这个问题已经被问了很多次,它总是引起同样的明显,但是,不正确的答案。 ;)
负回顾后发的方法 - (?<!\\)"
- 不工作,因为它没有考虑到为逃脱的反斜杠。我知道,这不是在问题中提到,但如果原文用反斜杠转义引号,你应该假设除非特别指出,它使用他们逃离其他反斜杠,太。
的交替的方法 - "(?:[^\\"]|\\.)*"
- 以逃脱反斜杠,但不正确的交易。并且增加另一个替代方案 - "(\\\\|\\"|[^"])*"
- 不能解决它。它匹配有效的输入没关系,但给出这样一个畸形的字符串:
"escaped \"quotes\" but no ending quote
...而不是报告一个失败的比赛,因为它应该,它错误地匹配这样的:
"escaped \"quotes\"
这里是最好的方法,因为在使用RegexBuddy的库中找到并讨论了The Book:
/"[^"\\]*(?:\\.[^"\\]*)*"/g
如果匹配的字符串不应该包括行分隔符(如Java字符串),使用此:
/"[^"\\\r\n]*(?:\\.[^"\\\r\n]*)*"/g
其他方法是可能的,但这一个有三个主要先行tages:它已经被证明很多次了。它非常有效;它不依赖于高级功能 - 换句话说,它甚至可以在JavaScript中使用,它是Perl衍生的正则表达式的红头发的继承人。 :D
你试过了什么? – 2012-08-01 23:14:31
到目前为止,您尝试过哪些方法不适合您?你使用什么样的正则表达式(PCRE,perl,.NET)?请编辑您的问题以添加您所做的工作,并为相应的正则表达式引擎添加标记。如果你提供给我们的信息,你很可能会得到帮助(你也会更快地获得帮助)。 – 2012-08-01 23:16:09