2013-10-03 5 views
113

Я хочу удалить "" вокруг строки.Я хочу удалить двойные кавычки из строки

например. если строка: "I am here", тогда я хочу вывести только I am here.

+2

Почему вы не просто используете string.replace ('"', '') –

+31

' str = str.replace (/ "/ g," ");' –

+8

Вы хотите удалить ВСЕ кавычки или граничные кавычки? – Kos

ответ

226

Предполагая:

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

Это должно сделать трюк ... (если ваша цель состоит в том, чтобы заменить все двойные кавычки).

Вот как это работает:

  • ['"] класс символов, соответствует как одинарные и двойные кавычки. вы можете заменить это на ", чтобы соответствовать только двойным кавычкам.
  • +: один или несколько цитат, символов, как это определено в предыдущем полукокса класса (по желанию)
  • g: в глобальной флага. Это говорит JS применять регулярное выражение ко всей строке. Если вы опустите это, вы замените только один символ.

Если вы пытаетесь удалить кавычки вокруг данной строки (то есть попарно), все становится немного сложнее. Вы должны будете использовать lookaround утверждение:

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 

Regex объяснил:

  • ": буквальный соответствует любому буквальным "
  • (, начинайте захватив группу. Все, что находится между круглыми скобками (()), будет записано и может использоваться в качестве замены.
  • [^"]+: класс символов, соответствует всем символов, за исключением " 1 или более раза
  • (?="): нулевая шириной (как в не учитывается) положительное опережение утверждения. Предыдущий матч будет действителен, только если он сопровождаемый " буквального
  • ): конец захват группы, мы захватили все, что между открытием закрытием "
  • ": другой буквальным, сравните элемент списка один

Замена '$1', это обратная ссылка на первую захваченную группу, являющуюся [^" ]+, или каждый из которых заключен между двойными кавычками. Шаблон соответствует как цитатам, так и тем, что находится между ними, но заменяет их только тем, что находится между кавычками, тем самым эффективно удаляя их.
Что это такое - some "string with" quotes -> заменяет "string with" - - string with. Котировки ушли, работа выполнена.

Если кавычки всегда будет в начале и в конце строки, то вы могли бы использовать это:

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

С вводом remove "foo" delimiting ", выход будет оставаться неизменным, но изменить входная строка до "remove "foo" delimiting quotes", и в итоге вы получите remove "foo" delimiting quotes.

Объяснение:

  • ^": соответствует началу строки ^ и ". Если строка не начинается с ", выражение здесь уже не работает, и ничего не заменяется.
  • (.+(?="$)): спички (и захватов) все, в том числе двойные кавычки один или несколько раз, при условии, что положительный предпросмотр верно
  • (?="$): положительный предпросмотр является такой же, как и выше, только указывает, что "необходимо быть конец строки ($ === конец)
  • "$: спички, что окончание цитаты, но не захватывает его

замена осуществляется таким же образом, как и раньше: мы заменим ма tch (включая открывающие и закрывающие кавычки) со всем, что было внутри них.
Возможно, вы заметили, что я пропустил флаг g (для глобального BTW), потому что поскольку мы обрабатываем всю строку, это выражение применяется только один раз.
Простейшего регулярного выражения, которое делает, в значительной степени, то же самое (есть внутреннее различие, как составляются регулярное выражение/прикладная) будут:

someStr.replace(/^"(.+)"$/,'$1'); 

Как до ^" и "$ совпадают с разграничивающими котировками на старте и конец строки, а (.+) соответствует всему, что находится между ними, и захватывает его. Я пробовал это регулярное выражение, рядом с тем, что было выше (с одобрением) и, по общему признанию, к моему удивлению обнаружил, что это немного медленнее. Мое предположение было бы в том, что утверждение lookaround заставляет предыдущее выражение сбой, как только движок определяет, что в конце строки нет ". Ах, хорошо, но если это то, что вы хотите/потребность, пожалуйста ПРОЧТИТЕинструкцию на:

Однако в этом последнем случае, это гораздо безопаснее, быстрее, легче поддерживать и просто лучше сделать это:

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. Easy-peazy.

Советы:

Подробнее о lookaround утверждений can be found here
Regex являются очень полезными (и ИМО весело), ​​может быть немного baffeling на первый. Here's some more details, and links to resources по этому вопросу.
Если вы не очень комфортно, используя регулярные выражения нам только еще, вы можете рассмотреть возможность использования:

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

Если есть много кавычек в строке, это может быть даже быстрее, чем при использовании регулярных выражений

+1

@rid: я отредактировал, немного исказил то, что делает выражение, и как его настроить –

+2

Очень хороший ответ! Спасибо Elias – peterpengnz

8

Если вы хотите, чтобы удалить граничные кавычки:

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

Такой подход не тронет строку, если она не выглядит как "text in quotes".

+1

Используйте' a.charAt (x) ', если вы хотите David

4

Если вы хотите, чтобы удалить кавычки с начала или конца, используйте следующее регулярное выражение:

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

Обратите внимание, что это также изменило бы' 'foo' и' foo''. Можно было бы только отбросить целые пары. – Kos

+0

Спасибо за примечание, я подумал это было ожидаемое поведение. – Denis

0

Если вы хотите, чтобы удалить все двойные кавычки в строке, используйте

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 
46
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) 
5

Чтобы пересчитать вашу проблему в способе, которым это легче выразить в виде регулярного выражения:

Get the substring of characters that is contained between zero or one leading double-quotes and zero or one trailing double-quotes.

Вот регулярное выражение, которое делает это:

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

Ломая regexp:

  • ^"? жадный матч ноль или один из ведущих двойных кавычек
  • "?$ жадный матч ноля или один трейлинг двойных кавычек
  • тех два форзаца не-жадный захват всех других персонажей, (.+?), который будет содержать цель как $1.

Это возвратит delimited "string" here для:

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

Этот простой код также будет работать, чтобы удалить, например, двойные кавычки из строки, окруженной с кавычками:

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

Если у вас есть контроль над вашими данными ...сказать:

"20151212211647278" 

или подобное это хорошо удаляет кавычки

JSON.parse("20151212211647278"); 

не универсальный ответ, однако пятно для ниши потребностей

+0

Это будет ошибка в FireFox с помощью: SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON –

+0

нет ... отлично работает при текущей новой версии FireFox –

+0

JSON. parse ("{123123}"), это сдует ваш ответ – Abhijeet

-2

Это ява скрипт код ...

var string="I am here" 
    var stringify= JSON.stringify(string); 
    element= stringify.replace (/"/g,''); 
    document.getElementById("demo").innerHTML = element; 

html-код ..

3

Один лайнер для ленивых

var str = '"a string"'; 
str = str.replace(/^"|"$/g, ''); 
-1

Если строка гарантированно иметь одну цитату (или любой другой одиночный символ) в начале и в конце, который вы хотите удалить:

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

slice имеет гораздо меньше накладных расходов, чем регулярное выражение.

+1

Почему downvotes? «Я здесь». Slice (1, -1) -> «Я здесь»! – darrinm

+0

Удивленно это было приостановлено, так как это именно такая «быстрая» операция, которая вам нужна, если вы имеете дело с литералами RDF (например, в N3 URI обычно обозначаются как «» и литералы, такие как «буквальный») , Итак, вот вверх. ;) –

+0

(В частности, поскольку в исходном вопросе говорится, что они хотят удалить цитаты * вокруг * строки.) –

Смежные вопросы