136 lines
4.7 KiB
Python
136 lines
4.7 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
def safe_escape_js_string(text):
|
|||
|
|
"""安全地转义JavaScript字符串"""
|
|||
|
|
# 转义反斜杠(必须首先执行)
|
|||
|
|
text = text.replace('\\', '\\\\')
|
|||
|
|
# 转义双引号
|
|||
|
|
text = text.replace('"', '\\"')
|
|||
|
|
# 转义换行符
|
|||
|
|
text = text.replace('\n', '\\n')
|
|||
|
|
# 转义回车符
|
|||
|
|
text = text.replace('\r', '\\r')
|
|||
|
|
# 转义制表符
|
|||
|
|
text = text.replace('\t', '\\t')
|
|||
|
|
return text
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
# 读取BIM工程师的修改版简历
|
|||
|
|
with open('网页未导入数据/土木水利产业/土木水利修改版简历/BIM工程师.md', 'r', encoding='utf-8') as f:
|
|||
|
|
bim_content = f.read()
|
|||
|
|
|
|||
|
|
# 安全转义内容
|
|||
|
|
escaped_content = safe_escape_js_string(bim_content)
|
|||
|
|
|
|||
|
|
# 读取当前的resumeInterviewMock.js文件
|
|||
|
|
with open('src/mocks/resumeInterviewMock.js', 'r', encoding='utf-8') as f:
|
|||
|
|
js_content = f.read()
|
|||
|
|
|
|||
|
|
# 查找错误的modified字段 - 从"modified": "# BIM工程师开始,到下一个"}结束
|
|||
|
|
# 使用更加精确的正则表达式
|
|||
|
|
pattern = r'"modified":\s*"# BIM工程师[^"]*"[^}]*"'
|
|||
|
|
|
|||
|
|
# 查找所有匹配
|
|||
|
|
matches = list(re.finditer(pattern, js_content, re.DOTALL))
|
|||
|
|
print(f"找到 {len(matches)} 个匹配")
|
|||
|
|
|
|||
|
|
if matches:
|
|||
|
|
for match in matches:
|
|||
|
|
print(f"匹配位置: {match.start()} - {match.end()}")
|
|||
|
|
print(f"匹配内容开头: {match.group()[:100]}...")
|
|||
|
|
|
|||
|
|
# 使用更简单的方法:找到 "modified": " 开始,然后找到对应的结束引号
|
|||
|
|
# 考虑到内容可能有未转义的引号,我们需要找到正确的结束位置
|
|||
|
|
|
|||
|
|
# 先定位到BIM工程师条目的大概位置
|
|||
|
|
bim_pos = js_content.find('"position": "BIM工程师"')
|
|||
|
|
if bim_pos == -1:
|
|||
|
|
print("未找到BIM工程师条目")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
print(f"BIM工程师条目位置: {bim_pos}")
|
|||
|
|
|
|||
|
|
# 从这个位置开始查找modified字段
|
|||
|
|
modified_start = js_content.find('"modified":', bim_pos)
|
|||
|
|
if modified_start == -1:
|
|||
|
|
print("未找到modified字段")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
print(f"modified字段开始位置: {modified_start}")
|
|||
|
|
|
|||
|
|
# 找到引号开始位置
|
|||
|
|
quote_start = js_content.find('"', modified_start + len('"modified":'))
|
|||
|
|
if quote_start == -1:
|
|||
|
|
print("未找到modified字段的开始引号")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
print(f"内容开始引号位置: {quote_start}")
|
|||
|
|
|
|||
|
|
# 从下一个字符开始,找到这个字段的结束位置
|
|||
|
|
# 我们需要找到 "}作为整个对象的结束
|
|||
|
|
current_pos = quote_start + 1
|
|||
|
|
brace_count = 0
|
|||
|
|
in_string = True
|
|||
|
|
|
|||
|
|
# 简单方法:找到下一个 "},这应该是content对象的结束
|
|||
|
|
content_end = js_content.find('}', current_pos)
|
|||
|
|
while content_end != -1:
|
|||
|
|
# 检查这个}前面是否有"
|
|||
|
|
check_pos = content_end - 1
|
|||
|
|
while check_pos > current_pos and js_content[check_pos] in ' \n\t':
|
|||
|
|
check_pos -= 1
|
|||
|
|
if js_content[check_pos] == '"':
|
|||
|
|
# 找到了正确的结束位置
|
|||
|
|
break
|
|||
|
|
content_end = js_content.find('}', content_end + 1)
|
|||
|
|
|
|||
|
|
if content_end == -1:
|
|||
|
|
print("未找到content对象的结束位置")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
print(f"content对象结束位置: {content_end}")
|
|||
|
|
|
|||
|
|
# 现在替换modified字段的值
|
|||
|
|
# 找到 "modified": " 的结束位置,然后替换到下一个 " 之前的内容
|
|||
|
|
modified_value_start = js_content.find('"', modified_start + len('"modified":'))
|
|||
|
|
modified_value_start += 1 # 跳过开始的引号
|
|||
|
|
|
|||
|
|
# 找到这个值的结束引号 - 在content_end之前
|
|||
|
|
modified_value_end = content_end
|
|||
|
|
check_pos = content_end - 1
|
|||
|
|
while check_pos > modified_value_start and js_content[check_pos] in ' \n\t':
|
|||
|
|
check_pos -= 1
|
|||
|
|
if js_content[check_pos] == '"':
|
|||
|
|
modified_value_end = check_pos
|
|||
|
|
|
|||
|
|
print(f"modified值的位置: {modified_value_start} - {modified_value_end}")
|
|||
|
|
|
|||
|
|
# 构建新的内容
|
|||
|
|
new_js_content = (js_content[:modified_value_start] +
|
|||
|
|
escaped_content +
|
|||
|
|
js_content[modified_value_end:])
|
|||
|
|
|
|||
|
|
# 保存修复后的文件
|
|||
|
|
with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(new_js_content)
|
|||
|
|
|
|||
|
|
print("已成功替换BIM工程师的modified字段内容")
|
|||
|
|
|
|||
|
|
# 验证语法
|
|||
|
|
import subprocess
|
|||
|
|
try:
|
|||
|
|
result = subprocess.run(['node', '-c', 'src/mocks/resumeInterviewMock.js'],
|
|||
|
|
capture_output=True, text=True)
|
|||
|
|
if result.returncode == 0:
|
|||
|
|
print("✅ JavaScript语法检查通过")
|
|||
|
|
else:
|
|||
|
|
print("❌ JavaScript语法错误:")
|
|||
|
|
print(result.stderr)
|
|||
|
|
except Exception as e:
|
|||
|
|
print("无法验证JavaScript语法:", e)
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|