 | |  |  | AIWROK软件正则用法实际例子
- /*
- * AIWROK 正则表达式高级应用系统
- * ES5系统安卓 JavaScript引擎Rhino
- * 交流QQ群711841924群一,苹果内测群,528816639
- * 案例:用户数据处理与分析综合平台
- */
- // 高级数据验证系统
- var AdvancedValidationSystem = {
- // 验证规则库 - 包含更复杂的模式匹配
- rules: {
- // 复杂邮箱验证(支持国际化域名)
- email: /^[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]{2,}|xn--[a-zA-Z0-9]+)$/i,
-
- // 国际手机号验证(支持多种格式)
- internationalPhone: /^\+?[1-9]\d{1,14}$/,
-
- // 中国大陆手机号验证(更严格的格式)
- cnPhone: /^1[3-9]\d{9}$/,
-
- // 复杂URL验证(支持IPv4地址和端口号)
- url: /^(https?:\/\/)?(?:www\.)?[a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,})+(?:\/[\w\-.~:/?#@![ DISCUZ_CODE_0 ]amp;'\(\)*+,;=]*)?$/i,
-
- // 日期时间验证(支持多种格式)
- datetime: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(?:\s+\d{2}:\d{2}(?::\d{2})?)?$/,
-
- // 身份证号验证(支持15位和18位)
- idCard: /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}(?:\d|X|x)$/,
-
- // 复杂用户名验证(支持中文、字母、数字、下划线,4-20位)
- username: /^[\u4e00-\u9fa5a-zA-Z0-9_]{4,20}$/,
-
- // 密码强度高级验证
- strongPassword: /^[A-Za-z\d@$!%*?&]{8,}$/,
-
- // IPv4地址验证
- ipv4: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
-
- // 银行卡号验证(Luhn算法前的格式验证)
- bankCard: /^[0-9]{16,19}$/
- },
-
- // 执行验证
- validate: function(data, field, customRule) {
- var rule = customRule || this.rules[field];
- if (!rule) {
- throw new Error("Validation rule not found: " + field);
- }
- return rule.test(data);
- },
-
- // 批量验证
- validateBatch: function(data, rules) {
- var results = {};
- for (var field in rules) {
- if (rules.hasOwnProperty(field)) {
- results[field] = this.validate(data[field], field, rules[field]);
- }
- }
- return results;
- }
- };
- // 复杂文本内容分析与信息提取系统
- var TextAnalysisSystem = {
- // 提取指定类型的信息
- extract: function(text, type) {
- var patterns = {
- emails: /[a-zA-Z0-9._%+-]+@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}|xn--[a-zA-Z0-9]+)/gi,
- phones: /\+?[1-9]\d{1,14}/g,
- cnPhones: /1[3-9]\d{9}/g,
- urls: /(https?:\/\/[\w\-.~:/?#@![ DISCUZ_CODE_0 ]amp;'\(\)*+,;=]+)/g,
- dates: /\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])/g,
- versions: /v?\d+\.\d+\.\d+(-\w+)?/g,
- numbers: /-?\d+(\.\d+)?/g,
- ipAddresses: /((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/g
- };
-
- var pattern = patterns[type];
- if (!pattern) {
- throw new Error("Extract type not supported: " + type);
- }
-
- return text.match(pattern) || [];
- },
-
- // 分析文本结构
- analyzeStructure: function(text) {
- var lines = text.split("\n");
- var paragraphs = text.split(/\n\s*\n/);
-
- return {
- totalCharacters: text.length,
- totalWords: text.split(/\s+/).filter(function(word) { return word.length > 0; }).length,
- totalLines: lines.length,
- totalParagraphs: paragraphs.length,
- averageWordsPerLine: Math.round((text.split(/\s+/).length / lines.length) * 100) / 100,
- averageWordsPerParagraph: Math.round((text.split(/\s+/).length / paragraphs.length) * 100) / 100
- };
- },
-
- // 关键词频率统计
- keywordFrequency: function(text, keywords) {
- var frequencies = {};
- var textLower = text.toLowerCase();
-
- keywords.forEach(function(keyword) {
- var pattern = new RegExp(keyword.toLowerCase(), "g");
- frequencies[keyword] = (textLower.match(pattern) || []).length;
- });
-
- return frequencies;
- }
- };
- // 数据清洗与标准化系统
- var DataCleaningSystem = {
- // 标准化手机号格式
- standardizePhone: function(phone) {
- // 去除所有非数字和加号
- var cleaned = phone.replace(/[^\d+]/g, "");
-
- // 标准化国际手机号格式
- if (cleaned.indexOf("+") === -1 && cleaned.length === 11 && cleaned.charAt(0) === "1") {
- return "+86" + cleaned;
- }
-
- return cleaned;
- },
-
- // 标准化日期格式
- standardizeDate: function(date) {
- // 将各种日期格式转换为YYYY-MM-DD
- var patterns = [
- /^(\d{4})\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/, // YYYY/MM/DD
- /^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/, // YYYY-MM-DD
- /^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/(\d{4})$/ // DD/MM/YYYY
- ];
-
- for (var i = 0; i < patterns.length; i++) {
- var match = date.match(patterns[i]);
- if (match) {
- if (i === 2) { // DD/MM/YYYY 格式
- return match[3] + "-" + match[2] + "-" + match[1];
- }
- return match[1] + "-" + match[2] + "-" + match[3];
- }
- }
-
- return date; // 返回原始日期,如果无法标准化
- },
-
- // 清除HTML标签
- stripHtml: function(html) {
- return html.replace(/<[^>]+>/g, "");
- },
-
- // 去除多余空格和换行
- normalizeWhitespace: function(text) {
- return text.replace(/\s+/g, " ").trim();
- },
-
- // 提取并标准化关键信息
- extractAndStandardize: function(text) {
- var extracted = {
- emails: this.extractUnique(text, /[a-zA-Z0-9._%+-]+@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}|xn--[a-zA-Z0-9]+)/gi),
- phones: this.extractUnique(text, /\+?[1-9]\d{1,14}/g).map(this.standardizePhone),
- urls: this.extractUnique(text, /(https?:\/\/[\w\-.~:/?#@![ DISCUZ_CODE_0 ]amp;'\(\)*+,;=]+)/g),
- dates: this.extractUnique(text, /\d{4}[\/-](0[1-9]|1[0-2])[\/-](0[1-9]|[12]\d|3[01])/g).map(this.standardizeDate)
- };
-
- return extracted;
- },
-
- // 提取唯一值
- extractUnique: function(text, pattern) {
- var matches = text.match(pattern) || [];
- var unique = {};
-
- matches.forEach(function(match) {
- unique[match.toLowerCase()] = match;
- });
-
- return Object.keys(unique).map(function(key) {
- return unique[key];
- });
- }
- };
- // 日志分析与监控系统
- var LogAnalysisSystem = {
- // 提取指定级别的日志
- extractLogsByLevel: function(logs, level) {
- var pattern = new RegExp("\[[^\]]+\] " + level + ": [^\n]+", "g");
- return logs.match(pattern) || [];
- },
-
- // 解析日志条目
- parseLogEntry: function(logEntry) {
- var pattern = /\[([^\]]+)\]\s*(\w+):\s*([^-]+)-(.*)/;
- var match = logEntry.match(pattern);
-
- if (!match) {
- return null;
- }
-
- var entry = {
- timestamp: match[1],
- level: match[2],
- message: match[3].trim(),
- details: {}
- };
-
- // 解析详细信息
- var details = match[4].split(", ");
- details.forEach(function(detail) {
- var parts = detail.split(": ");
- if (parts.length === 2) {
- entry.details[parts[0].trim()] = parts[1].trim();
- }
- });
-
- return entry;
- },
-
- // 统计日志信息
- analyzeLogs: function(logs) {
- var levels = {
- INFO: (logs.match(/INFO:/g) || []).length,
- ERROR: (logs.match(/ERROR:/g) || []).length,
- WARN: (logs.match(/WARN:/g) || []).length,
- DEBUG: (logs.match(/DEBUG:/g) || []).length
- };
-
- var errorPattern = /ERROR: [^\n]+/g;
- var errors = logs.match(errorPattern) || [];
-
- // 提取所有错误代码
- var errorCodes = [];
- errors.forEach(function(error) {
- var codeMatch = error.match(/code: (\d+)/);
- if (codeMatch) {
- errorCodes.push(codeMatch[1]);
- }
- });
-
- return {
- totalLogs: logs.split("\n").length,
- levels: levels,
- totalErrors: errors.length,
- errorCodes: this.countUnique(errorCodes)
- };
- },
-
- // 统计唯一值
- countUnique: function(arr) {
- var counts = {};
- arr.forEach(function(item) {
- counts[item] = (counts[item] || 0) + 1;
- });
- return counts;
- }
- };
- // 高级模板引擎与替换系统
- var TemplateEngine = {
- // 替换模板变量
- render: function(template, data) {
- return template.replace(/\{\{([^}]+)\}\}/g, function(match, key) {
- return data[key] || match;
- });
- },
-
- // 带过滤器的模板替换
- renderWithFilters: function(template, data, filters) {
- return template.replace(/\{\{([^|}]+)(\|([^}]+))?\}\}/g, function(match, key, filterWithPipe, filterName) {
- var value = data[key] || match;
-
- if (filterName && filters[filterName]) {
- return filters[filterName](value);
- }
-
- return value;
- });
- },
-
- // 正则表达式批量替换
- batchReplace: function(text, replacements) {
- for (var pattern in replacements) {
- if (replacements.hasOwnProperty(pattern)) {
- var regex = new RegExp(pattern, "g");
- text = text.replace(regex, replacements[pattern]);
- }
- }
- return text;
- }
- };
- // 高级密码安全系统
- var PasswordSecuritySystem = {
- // 检查密码强度
- checkStrength: function(password) {
- var strength = 0;
- var feedback = [];
-
- // 长度检查
- if (password.length >= 12) {
- strength += 25;
- } else if (password.length >= 8) {
- strength += 15;
- } else {
- feedback.push("密码长度至少8位");
- }
-
- // 包含小写字母
- if (/[a-z]/.test(password)) {
- strength += 20;
- } else {
- feedback.push("包含小写字母");
- }
-
- // 包含大写字母
- if (/[A-Z]/.test(password)) {
- strength += 20;
- } else {
- feedback.push("包含大写字母");
- }
-
- // 包含数字
- if (/\d/.test(password)) {
- strength += 15;
- } else {
- feedback.push("包含数字");
- }
-
- // 包含特殊字符
- if (/[^a-zA-Z0-9]/.test(password)) {
- strength += 20;
- } else {
- feedback.push("包含特殊字符");
- }
-
- // 检查常见密码
- var commonPasswords = ["password", "123456", "qwerty", "admin", "12345678"];
- if (commonPasswords.indexOf(password.toLowerCase()) !== -1) {
- strength = 0;
- feedback.unshift("避免使用常见密码");
- }
-
- // 检查连续字符
- if (/\d{3,}|[a-zA-Z]{3,}/.test(password)) {
- strength -= 10;
- feedback.push("避免连续字符");
- }
-
- return {
- strength: Math.max(0, strength),
- feedback: feedback,
- level: strength >= 80 ? "极强" : strength >= 60 ? "强" : strength >= 40 ? "中" : "弱"
- };
- },
-
- // 生成密码强度建议
- generateSuggestions: function() {
- return [
- "使用12位以上的密码",
- "组合使用大小写字母",
- "包含数字和特殊字符",
- "避免使用常见单词",
- "定期更换密码",
- "不要在多个网站使用相同密码"
- ];
- }
- };
- // 正则表达式性能分析与优化系统
- var RegexPerformanceSystem = {
- // 性能基准测试
- benchmark: function(pattern, text, iterations) {
- iterations = iterations || 1000;
- var regex = new RegExp(pattern, "g");
- var startTime = new Date().getTime();
-
- for (var i = 0; i < iterations; i++) {
- text.match(regex);
- }
-
- var endTime = new Date().getTime();
- return {
- pattern: pattern,
- iterations: iterations,
- time: endTime - startTime,
- averageTime: (endTime - startTime) / iterations + "ms/次"
- };
- },
-
- // 比较不同正则表达式的性能
- comparePatterns: function(patterns, text, iterations) {
- var results = [];
-
- for (var i = 0; i < patterns.length; i++) {
- results.push(this.benchmark(patterns[i], text, iterations));
- }
-
- // 按性能排序
- results.sort(function(a, b) {
- return a.time - b.time;
- });
-
- return results;
- },
-
- // 优化正则表达式建议
- getOptimizationTips: function() {
- return [
- "使用精确的字符类代替通配符",
- "使用非捕获组(?:...)代替捕获组(...),当不需要提取数据时",
- "使用^和$锚点限制匹配范围",
- "避免过度使用回溯,如嵌套量词",
- "使用预编译正则表达式提高性能",
- "对于频繁使用的模式,考虑使用字符串方法代替正则表达式"
- ];
- }
- };
- // 综合应用示例
- function runComprehensiveExample() {
- printl("AIWROK 正则表达式高级应用系统", "");
-
- // 1. 高级数据验证示例
- printl("1. 高级数据验证示例", "");
- var userData = {
- email: "user@example.com.cn",
- cnPhone: "13812345678",
- url: "https://www.aiwrok.com",
- datetime: "1990-01-15",
- idCard: "110101199001151234"
- };
-
- for (var key in userData) {
- if (userData.hasOwnProperty(key)) {
- var isValid = AdvancedValidationSystem.validate(userData[key], key);
- printl(key, userData[key] + " => " + (isValid ? "有效" : "无效"));
- }
- }
-
- // 2. 文本内容分析示例
- printl("2. 文本内容分析示例", "");
- var sampleText = "AIWROK发布于2024年1月15日,官方网站是https://www.aiwrok.com。\n" +
- "联系邮箱:support@aiwrok.com,客服电话:400-888-8888。\n" +
- "用户可以通过手机号13812345678或邮箱user@example.com注册。\n" +
- "支持的功能包括:自动点击、文本识别、图像处理等。\n" +
- "版本历史:v1.0.0(2024-01-15), v1.1.0(2024-03-20), v2.0.0(2024-06-10)";
-
- var extractedEmails = TextAnalysisSystem.extract(sampleText, "emails");
- var extractedPhones = TextAnalysisSystem.extract(sampleText, "cnPhones");
- var extractedUrls = TextAnalysisSystem.extract(sampleText, "urls");
-
- printl("提取到的邮箱", extractedEmails);
- printl("提取到的手机号", extractedPhones);
- printl("提取到的网址", extractedUrls);
-
- // 3. 数据清洗与标准化示例
- printl("3. 数据清洗与标准化示例", "");
- var messyData = "联系信息: 13812345678 (手机) ,邮箱:USER@EXAMPLE.COM \n" +
- "注册日期:2024/01/15 ,网站:HTTPS://WWW.AIWROK.COM/path\n" +
- "IP地址:192.168.1.1,另一个邮箱:admin@aiwrok.com";
-
- var cleanedData = DataCleaningSystem.extractAndStandardize(messyData);
- printl("清洗后的邮箱", cleanedData.emails);
- printl("清洗后的手机号", cleanedData.phones);
- printl("清洗后的日期", cleanedData.dates);
-
- // 4. 日志分析示例
- printl("4. 日志分析示例", "");
- var sampleLogs = "[2024-01-15 10:30:25] INFO: 用户登录成功 - userId: 12345[2024-01-15 10:31:45] ERROR: 数据库连接失败 - code: 500, message: connection timeout[2024-01-15 10:32:10] WARN: 磁盘空间不足 - used: 85%, threshold: 80%[2024-01-15 10:33:00] INFO: 文件上传完成 - filename: report.pdf, size: 2.5MB[2024-01-15 10:34:22] ERROR: API请求失败 - url: /api/user, code: 404, message: not found";
- var errorLogs = LogAnalysisSystem.extractLogsByLevel(sampleLogs, "ERROR");
- var logStats = LogAnalysisSystem.analyzeLogs(sampleLogs);
- printl("ERROR日志数量", errorLogs.length);
- printl("日志级别统计", logStats.levels);
-
- // 5. 模板引擎示例
- printl("5. 模板引擎示例", "");
- var template = "尊敬的{{username}},您的订单#{{orderId}}已发货。\n" +
- "预计送达时间:{{deliveryDate}},物流单号:{{trackingNumber}}。\n" +
- "金额:{{amount|currency}}元";
-
- var orderData = {
- username: "张三",
- orderId: "ORD20240115001",
- deliveryDate: "2024-01-20",
- trackingNumber: "SF1234567890",
- amount: 299.99
- };
-
- var filters = {
- currency: function(value) {
- return parseFloat(value).toFixed(2);
- }
- };
-
- var rendered = TemplateEngine.renderWithFilters(template, orderData, filters);
- printl("渲染后的模板", rendered);
-
- // 6. 密码强度检查示例
- printl("6. 密码强度检查示例", "");
- var testPasswords = ["123456", "password", "Password123", "P@ssw0rd!2024", "C0mpl3xP@ssw0rd2024"];
-
- testPasswords.forEach(function(pwd) {
- var result = PasswordSecuritySystem.checkStrength(pwd);
- printl("密码 '" + pwd + "'", "强度:" + result.strength + "% (" + result.level + ")");
- });
-
- printl("AIWROK 正则表达式高级应用系统完成", "");
- }
- // 执行综合示例
- runComprehensiveExample();
复制代码
| |  | |  |
|