ai didi

javascript - 我想从字符串中删除双引号

转载 作者:IT老高 更新时间:2023-10-28 13:14:44 24 4
gpt4 key购买 nike

我想删除 ""围绕一个字符串。

例如如果字符串是:"I am here"那么我只想输出 I am here .

最佳答案

假设:

var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));
这应该可以解决问题......(如果您的目标是替换所有双引号)。
这是它的工作原理:
  • ['"]是一个字符类,匹配单引号和双引号。你可以用 " 替换它只匹配双引号。
  • + :一个或多个引号,字符,由前面的字符类(可选)定义
  • g : 全局标志。这告诉 JS 将正则表达式应用于整个字符串。如果省略此项,则只会替换单个字符。

  • 如果您试图删除给定字符串周围的引号(即成对),事情会变得有点棘手。您必须使用环视断言:
    var str = 'remove "foo" delimiting double quotes';
    console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
    //logs remove foo delimiting quotes
    str = 'remove only "foo" delimiting "';//note trailing " at the end
    console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
    //logs remove only foo delimiting "<-- trailing double quote is not removed
    正则表达式解释:
  • " : 文字,匹配任何文字 "
  • ( : 开始捕获组。括号 ( () ) 之间的任何内容都将被捕获,并可用于替换值。
  • [^"]+ : 字符类,匹配所有字符,除了 " 1 次或多次
  • (?=") :零宽度(如未捕获)正向前瞻断言。前一场比赛只有在后面跟着 " 时才有效。文字
  • ) :结束捕获组,我们已经捕获了开始结束之间的所有内容 "
  • " : 另一个文字,参见列表项第一个

  • 替换是 '$1' ,这是对第一个捕获组的反向引用,即 [^" ]+ , 或双引号之间的所有内容。该模式匹配引号和它们之间的内容,但仅用引号之间的内容替换它,从而有效地删除它们。
    它的作用是 some "string with" quotes -> 替换 "string with"与 -> string with .行情消失,工作完成。
    如果引号总是在字符串的开头和结尾,那么你可以使用这个:
    str.replace(/^"(.+(?="$))"$/, '$1');
    或者这对于双引号和单引号:
    str.replace(/^["'](.+(?=["']$))["']$/, '$1');
    随着输入 remove "foo" delimiting " ,输出将保持不变,但将输入字符串更改为 "remove "foo" delimiting quotes" ,你最终会得到 remove "foo" delimiting quotes作为输出。
    解释:
  • ^" : 匹配字符串的开头 ^和一个 " .如果字符串不以 " 开头,这里的表达式已经失败,没有被替换。
  • (.+(?="$)) : 匹配(并捕获)所有内容,包括一次或多次双引号,前提是正向预测为真
  • (?="$) : 正向前瞻与上面大致相同,只是它指定了 "必须是字符串的结尾($ === 结尾)
  • "$ : 匹配该结束引号,但不捕获它

  • 替换的方式与之前相同:我们用其中的所有内容替换匹配项(包括开始和结束引号)。
    你可能已经注意到我省略了 g标志(对于全局 BTW),因为由于我们正在处理整个字符串,因此该表达式仅适用一次。
    一个更简单的正则表达式几乎可以做同样的事情(正则表达式的编译/应用方式存在内部差异)是:
    someStr.replace(/^"(.+)"$/,'$1');
    和以前一样 ^""$匹配字符串开头和结尾的分隔引号,以及 (.+)匹配两者之间的所有内容,并捕获它。我已经尝试过这个正则表达式,以及上面的那个(带有前瞻断言),不可否认,令我惊讶的是发现这个稍微慢了一点。我的猜测是,只要引擎确定没有 ",环视断言就会导致前面的表达式失败。在字符串的末尾。嗯,但如果这是您想要/需要的,请继续阅读:
    然而,在最后一种情况下,这样做更安全、更快、更易于维护并且更好:
    if (str.charAt(0) === '"' && str.charAt(str.length -1) === '"')
    {
    console.log(str.substr(1,str.length -2));
    }
    在这里,我正在检查字符串中的第一个和最后一个字符是否是双引号。如果是,我正在使用 substr切断那些第一个和最后一个字符。字符串是零索引的,所以最后一个字符是 charAt(str.length -1) . substr需要 2 个参数,其中第一个是子字符串开始的偏移量,第二个是它的长度。由于我们不想要最后一个字符,而不是我们想要第一个字符,所以长度是 str.length - 2 .轻松。
    提示:
    更多关于环视断言的信息 can be found here
    正则表达式非常有用(而且 IMO 很有趣),一开始可能有点令人困惑。 Here's some more details, and links to resources在这件事上。
    如果您还不太习惯使用正则表达式,您可能需要考虑使用:
    var noQuotes = someStr.split('"').join('');
    如果字符串中有很多引号,这甚至可能比使用正则表达式更快

    关于javascript - 我想从字符串中删除双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19156148/

    24 4 0
    文章推荐: javascript - 使用 JavaScript/jQuery 在重定向上发送 POST 数据?
    文章推荐: MongoDB:无法规范化查询:BadValue $not 需要正则表达式或文档
    文章推荐: javascript - 获取对象的第一个索引
    文章推荐: javascript - 如何使用 jQuery 等待 CSS3 过渡结束?
    IT老高
    个人简介

    我是一名优秀的程序员,十分优秀!

    滴滴打车优惠券免费领取
    滴滴打车优惠券
    全站热门文章
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com