当前位置:首页 > JavaScript

js实现引号闭合

2026-03-16 00:27:38JavaScript

检查字符串中的引号是否闭合

在JavaScript中,可以通过遍历字符串并统计引号数量来判断引号是否闭合。以下是一种实现方法:

js实现引号闭合

function areQuotesBalanced(str) {
    let singleQuotes = 0;
    let doubleQuotes = 0;

    for (let i = 0; i < str.length; i++) {
        const char = str[i];
        if (char === "'" && (i === 0 || str[i-1] !== "\\")) {
            singleQuotes++;
        }
        if (char === '"' && (i === 0 || str[i-1] !== "\\")) {
            doubleQuotes++;
        }
    }

    return singleQuotes % 2 === 0 && doubleQuotes % 2 === 0;
}

处理转义引号的情况

上面的代码考虑了转义引号的情况(如\'\"不会被计入)。如果需要更严格地处理转义字符,可以修改判断条件:

js实现引号闭合

function isEscaped(str, index) {
    let backslashCount = 0;
    while (index > 0 && str[--index] === '\\') {
        backslashCount++;
    }
    return backslashCount % 2 !== 0;
}

function areQuotesBalancedWithEscape(str) {
    let singleQuotes = 0;
    let doubleQuotes = 0;

    for (let i = 0; i < str.length; i++) {
        const char = str[i];
        if (char === "'" && !isEscaped(str, i)) {
            singleQuotes++;
        }
        if (char === '"' && !isEscaped(str, i)) {
            doubleQuotes++;
        }
    }

    return singleQuotes % 2 === 0 && doubleQuotes % 2 === 0;
}

使用栈数据结构处理嵌套引号

如果需要处理更复杂的嵌套情况(如在模板字符串中),可以使用栈数据结构:

function areQuotesNestedCorrectly(str) {
    const stack = [];
    const quotePairs = {
        "'": "'",
        '"': '"',
        '`': '`'
    };

    for (let i = 0; i < str.length; i++) {
        const char = str[i];

        // 检查是否是转义字符
        if (char === '\\') {
            i++; // 跳过下一个字符
            continue;
        }

        // 如果是开引号
        if (quotePairs[char]) {
            if (stack.length > 0 && stack[stack.length-1] === char) {
                stack.pop(); // 匹配到闭引号
            } else {
                stack.push(char); // 新的开引号
            }
        }
    }

    return stack.length === 0;
}

正则表达式方法

对于简单的情况,可以使用正则表达式快速检查:

function areQuotesBalancedRegex(str) {
    const singleQuoteRegex = /(^|[^\\])'(.*?(\\.[^']*)*)'/g;
    const doubleQuoteRegex = /(^|[^\\])"(.*?(\\.[^"]*)*)"/g;

    const singleQuotes = (str.match(/'/g) || []).length;
    const doubleQuotes = (str.match(/"/g) || []).length;

    return singleQuotes % 2 === 0 && doubleQuotes % 2 === 0;
}

注意:正则表达式方法可能无法处理所有边缘情况,特别是复杂的嵌套和转义场景。

标签: 引号js
分享给朋友:

相关文章

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…