javascript - 当我有一个单引号前面有一个空格时,如何不允许匹配正则表达式?
问题描述
如果引号的开头前面有一个空格,我想在我有奇数个引号时不匹配。在嵌套引号的情况下,只考虑最外层的引号。前任。
请不要“打开”灯。->这不应该匹配
请不要打开“灯”。->这应该匹配“灯”
我已经完成了直到匹配引号
((?!^)(\s)".*?[\s]*"+)|(^".*?[\s]*"+)
示例测试用例。
打开“Light A”和“Light B”->匹配light A和light B
“Light A”已打开 -> 匹配 Light A
她回答“如你所说”-> 不匹配
她回答“如你所说” -> 匹配“如你所说”
请不要打开“灯”。-> 这不应该匹配
请不要“打开‘灯’。->这不应该匹配
她回答“请打开'Light A'” -> 比赛请打开灯A
请不要“打开”灯。->这不应该匹配
解决方案
要替换"..."
JS 中前后没有空格的子字符串,您可以使用
.replace(/(\s|^)".*?"(?!\S)/g, '$1<REPLACEMENT_HERE>')
或者,匹配任何字符,包括换行符:
.replace(/(\s|^)"[^]*?"(?!\S)/g, '$1<REPLACEMENT_HERE>')
或者,如果您只针对最新的 ECMAScript 兼容 JS 环境,请使用
.replace(/(?<!\S)".*?"(?!\S)/g, '<REPLACEMENT_HERE>')
查看正则表达式演示
细节
(\s|^)
- 第 1 组:空格或字符串开头"
- 一种"
.*?
- 尽可能少的除换行符以外的任何 0+ 字符"
- 一种"
(?!\S)
- 空格或字符串结尾应该跟在当前位置之后。
在(?<!\S)
最后一个示例中,是一个否定的lookbehind,它匹配一个没有紧跟在非空白之前的位置,目前大多数浏览器不支持。
推荐阅读
- python - Ubuntu 18.04 中的 PIP 问题(pkg_resources.DistributionNotFound:未找到“pip==10.0.1”发行版,应用程序需要该发行版)
- django - 如何重构我的 Django 代码?
- javascript - PHP 表单和 Ajax 的问题
- c++ - 调用 glDrawElements 会破坏某些 GPU 上的显示?
- python - 将嵌套 Python dict 与 list 和 dict 进行比较
- c# - Unity Holotoolkit Spriterender
- excel - 使用 vba 更新 Excel 中的标题,不会覆盖现有值
- facebook - Intragram 图形 API Webhook
- python - 无法导入我刚刚安装的包
- python - 类变量 NameError 未定义 python