我想从String中删除双引号

时间:2013-10-03 09:56:16

标签: javascript regex

我想删除字符串周围的""

e.g。如果字符串是:"I am here",那么我只想输出I am here

16 个答案:

答案 0 :(得分:314)

假设:

var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));

这应该可以解决问题......(如果您的目标是替换所有双引号)。

以下是它的工作原理:

  • ['"]是一个字符类,匹配单引号和双引号。您可以将其替换为"以仅匹配双引号。
  • +:一个或多个引号,字符,由前面的char类定义(可选)
  • 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

正则表达式解释说:

  • ":literal,匹配任何文字"
  • (:开始捕捉群组。将捕获括号之间的任何内容(()),并且可以在替换值中使用。
  • [^"]+:字符类,匹配所有字符,但"除了1次或更多次
  • (?="):零宽度(如未捕获)正向前瞻断言。上一场比赛只有在"文字
  • 之后才有效
  • ):结束捕获小组,我们已经捕获了开幕式"
  • 之间的所有内容
  • ":另一个文字,cf列表项目

替换为'$1',这是对第一个捕获组的反向引用,为[^" ]+,或者在双引号之间。该模式匹配引号和它们之间的内容,但只用引号之间的内容替换它,从而有效地删除它们。
它的作用是some "string with" quotes - &gt;用 - &gt;替换"string with" string with。行情消失了,完成了工作。

如果引号总是将位于字符串的开头和结尾,那么你可以使用它:

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。易于peazy。

提示

有关外观断言的更多信息can be found here
正则表达式是非常有用的(和IMO乐趣),起初可能有点令人费解。关于此事Here's some more details, and links to resources 如果您对使用正则表达式感到不舒服,可能需要考虑使用:

var noQuotes = someStr.split('"').join('');

如果字符串中有很多引号,这甚至可能比使用正则表达式更快

答案 1 :(得分:66)

str = str.replace(/^"(.*)"$/, '$1');

这个正则表达式只会删除引号,如果它们是字符串的第一个和最后一个字符。 F.ex:

"I am here"  => I am here (replaced)
I "am" here  => I "am" here (untouched)
I am here"   => I am here" (untouched)

答案 2 :(得分:32)

如果字符串保证在您要删除的开头和结尾都有一个引号(或任何其他单个字符):

str = str.slice(1, -1);

slice的开销远低于正则表达式。

答案 3 :(得分:27)

如果你可以控制你的数据并且你知道你的双引号围绕着字符串(所以不要出现在字符串中)并且字符串是一个整数...说:

"20151212211647278"

或类似的,很好地删除了周围的引号

JSON.parse("20151212211647278");

不是一个普遍的答案,不过适合利基需求

答案 4 :(得分:11)

如果您只想删除边界引号:

function stripquotes(a) {
    if (a.charAt(0) === '"' && a.charAt(a.length-1) === '"') {
        return a.substr(1, a.length-2);
    }
    return a;
}

如果字符串看起来不像"text in quotes",则此方法不会触及该字符串。

答案 5 :(得分:7)

如果您只想从开头或结尾删除引号,请使用以下正则表达式:

'"Hello"'.replace(/(^"|"$)/g, '');

答案 6 :(得分:5)

以更容易表达为正则表达式的方式重述您的问题:

  

获取包含在零个或一个前导双引号和零个或一个尾随双引号之间的字符的子字符串。

这是执行该操作的正则表达式:

  var regexp = /^"?(.+?)"?$/;
  var newStr = str.replace(/^"?(.+?)"?$/,'$1');

打破正则表达式:

  • ^"?对于零或一个前导双引号的贪婪匹配
  • "?$贪婪匹配零或一个尾随双引号
  • 这两个人对所有其他角色(.+?)进行了非贪婪捕获,其中包含的目标为$1

这将返回delimited "string" here

str = "delimited "string" here"  // ...
str = '"delimited "string" here"' // ...
str = 'delimited "string" here"' // ... and
str = '"delimited "string" here'

答案 7 :(得分:4)

懒人的一个班轮

int

答案 8 :(得分:1)

如果要删除字符串中的所有双引号,请使用

var str = '"some "quoted" string"';
console.log( str.replace(/"/g, '') );
// some quoted string

否则,您只想删除字符串周围的引号,请使用:

var str = '"some "quoted" string"';
console.log( clean = str.replace(/^"|"$/g, '') );
// some "quoted" string

答案 9 :(得分:1)

如果你想成为老派,请使用 REGEX 1,$s/"//g

答案 10 :(得分:0)

这个简单的代码也可以使用,例如从双引号括起来的字符串中删除双引号:

var str = 'remove "foo" delimiting double quotes';
console.log(str.replace(/"(.+)"/g, '$1'));

答案 11 :(得分:0)

这有效...

var string1 = "'foo'";
var string2 = '"bar"';

function removeFirstAndLastQuotes(str){
  var firstChar = str.charAt(0);
  var lastChar = str[str.length -1];
  //double quotes
  if(firstChar && lastChar === String.fromCharCode(34)){
    str = str.slice(1, -1);
  }
  //single quotes
  if(firstChar && lastChar === String.fromCharCode(39)){
    str = str.slice(1, -1);
  }
  return str;
}
console.log(removeFirstAndLastQuotes(string1));
console.log(removeFirstAndLastQuotes(string2));

答案 12 :(得分:0)

var expressionWithoutQuotes = '';
for(var i =0; i<length;i++){
    if(expressionDiv.charAt(i) != '"'){
        expressionWithoutQuotes += expressionDiv.charAt(i);
    }
}

这可能对您有用。

答案 13 :(得分:0)

此代码非常适合于在文本框中显示编号

$(this)= [您的文本框]

input:valid {
  color: black;
  border: 5px solid #dadadada;
  border-radius: 7px;
}
input:invalid {
  color: navy;
  outline: none;
  border-color: #ff1050;
  box-shadow: 0 0 10px #ff0000;
}

答案 14 :(得分:-1)

请尝试按照正则表达式删除字符串中的双引号。

    $string = "I am here";
    $string =~ tr/"//d;
    print $string;
    exit();

答案 15 :(得分:-1)

如果您要删除双引号,请尝试以下

  var Stringstr = "\"I am here\"";
  var mystring = String(Stringstr);
  mystring = mystring.substring(1, mystring.length - 1);
  alert(mystring);