Regex不允许“;并且允许“;
Regex that disallows " and allows "
我写这篇文章是为了提取被引号(")包围的字符串。我在jquery中使用下面的语句来获取它。
var item = objstr.match(/'"(([^'"])*)'"/g);
但我想破例允许''"。
此正则表达式也可以工作,而无需使用look-aheads或look-behinds:(删除空格!)
/" ('''' | ''" | [^"])* "/
阅读:从双引号到双引号匹配字符串。中间可能没有转义反斜杠''
、转义双引号'"
或任何非引号字符,也可能有任何组合。这允许像这样的输入
"abc''abc'abc'"abc'''"abc"
有效,但不是
"abc''"abc"
// ^ String terminates here
如果您的字符串可能具有未标注的含义'"
,您可能会希望这样做。
@nickb的答案没有这个特性/bug,不管你怎么称呼它。这两个字符串在他的正则表达式中都是有效的。
如果您的正则表达式引擎能够关闭回溯,现在就是使用它的时候了。在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图书馆中的最佳方法,并在《》一书中进行了讨论
/"[^"'']*(?:''.[^"'']*)*"/g
如果匹配的字符串不应该包括行分隔符(如Java字符串文字),请使用以下内容:
/"[^"'''r'n]*(?:''.[^"'''r'n]*)*"/g
其他方法也是可能的,但这一方法有三个主要优点:它已经被多次证明;它非常高效;而且它不依赖于高级功能——换句话说,它甚至可以在JavaScript中工作,JavaScript是Perl派生的regex风格的红头继子。:D
- Don'不允许将焦点集中在自动完成的选择上
- 覆盖在赢得'不允许点击下面的标记,谷歌地图api v3
- js文件未加载js控制台say's”;不允许加载本地资源”;
- Jquery不允许来自多个选择列表的相同值
- 飞行前响应中的访问控制允许标头不允许Angularjs请求标头字段访问控制允许标题
- 不允许在文本框中使用小数
- TinyMCE全屏不允许出现模式窗口
- 不允许在字段中输入不需要的字符
- 访问控制允许标头不允许X-Requested-Wise
- Regex不允许“;并且允许“;
- Javascript Regex 来指定允许的内容(而不是不允许的内容)
- Regex不允许某些特殊字符
- 不允许使用除允许使用的字符javascript regex之外的特殊字符
- 我必须写Regex,它只允许@#$%作为特殊符号,而不允许其他人像><`~符号
- Regex模式,不允许使用除ALL、-和[0-9]之外的字符
- RegEx for Javascript(替换函数)只允许字母和空格,但不允许以空格开头
- Regex不允许除连字符和下划线以外的符号
- RegEx,只允许英文文本,不允许特殊字符
- 中的Regex不应允许连续的括号、连续的+号和连续的-号
- RegEx不允许单引号和双引号