3

我有以下字符串:

here "is 'a' \"string\" that" does contain a 'lot of "weird"' stuff "i" to 'find'

我想提取is 'a' \"string\" that,lot of "weird"和.ifind

有任何想法吗?谢谢!

4

2 回答 2

2

你可以试试这个模式:

/"((?:[^"\\]+|\\"|\\)*)"|'((?:[^'\\]+|\\'|\\)*)'/g

双引号内的内容在第 1 组,单引号内的内容在第 2 组。

注意:这个解决方案对于转义引号不是完全防水的,因为如果\"可以检测到上述模式的 ,前面有另一个\,那么 将\\被视为文字\并且引号不再转义!

为避免此陷阱,您可以检查是否有奇数个反斜杠替换\\"(?:\\{2})*\\",那么第一个模式将如下所示:

/"((?:[^"\\]+|(?:\\{2})*\\"|\\)*)"|'((?:[^'\\]+|(?:\\{2})*\\'|\\)*)'/g
于 2013-07-24T11:20:03.587 回答
2

这种基于负后瞻的正则表达式应该适合您:

/(["']).*?(?<!\\)\1/g

现场演示:http ://www.rubular.com/r/X3etmgKFNH

不支持后向的正则表达式,例如 Javascript

/(['"])(?:\1|.*?[^\\]\1)/g

现场演示:http ://www.rubular.com/r/SQyEYIPS4l

于 2013-07-24T11:27:35.147 回答