当前位置:首页 > JavaScript

js实现引号闭合

2026-03-16 00:27:38JavaScript

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

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

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;
}

处理转义引号的情况

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

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;
}

正则表达式方法

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

js实现引号闭合

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实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…