作者:容源伯依79 | 来源:互联网 | 2024-12-20 15:31
在处理 JSON 或其他文本格式时,我们经常需要提取特定的字符串内容。例如,以下字符串:
var str = '"suggest": "1.建议:1、部署\"网络\"防火墙"'
其中包含两对双引号的内容:
- "suggest"
- "1.建议:1、部署\"网络\"防火墙"
我们的目标是仅匹配含有中文的双引号内容,并且要包括转义的双引号。
为了实现这一目标,我们需要构建一个合适的正则表达式。以下是详细的解决方案和尝试过程:
解决方案
我们可以使用以下正则表达式来匹配所需的字符串:
1
| var reg = /"([^"]*(?:\\"[^"]*)*[一-龥]+[^"]*(?:\\"[^"]*)*)"/g; |
解释:
- [^"]*
匹配任意数量的非双引号字符。
- (?:\\"[^"]*)*
匹配任意数量的转义双引号及其后的非双引号字符。
- [一-龥]+
确保至少有一个中文字符。
- 整个模式确保了我们只匹配包含中文的双引号内容,并正确处理转义双引号。
尝试1
最初尝试如下正则表达式:
1
| var reg = /"([^"*][\u4e00-\u9fa5]+[^"]*)"/; |
但遇到的问题是,当出现转义字符时,匹配结果会中断(如:"1.建议:1、部署\"),无法完整匹配整个字符串。
尝试2
接下来尝试使用更宽松的匹配:
1
| var reg = /"(.*[\u4e00-\u9fa5]+.*)"/; |
然而,这种方法会导致匹配到不需要的内容,比如 "suggest": "1.建议:1、部署\"网络\"防火墙"。
最终解决方案
通过改进的正则表达式,我们可以准确地匹配所需的中文内容,同时处理转义双引号。测试代码如下:
1 2
| var str = '"suggest": "1.建议:1、部署\"网络\"防火墙"'; console.log(str.match(reg)); // 期待结果: ["1.建议:1、部署\"网络\"防火墙"] |