我想删除""
字符串周围。
例如,如果字符串为:,"I am here"
那么我只想输出I am here
。
str = str.replace(/"/g,"");
str = str.replace(/^"|"$/g, '');
替换边界引号。Mr_Green的答案将在全球范围全部更换"
这是没有好
我想删除""
字符串周围。
例如,如果字符串为:,"I am here"
那么我只想输出I am here
。
str = str.replace(/"/g,"");
str = str.replace(/^"|"$/g, '');
替换边界引号。Mr_Green的答案将在全球范围全部更换"
这是没有好
Answers:
假设:
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');
使用input remove "foo" delimiting "
,输出将保持不变,但是将输入字符串更改为"remove "foo" delimiting quotes"
,最后将得到remove "foo" delimiting quotes
输出。
说明:
^"
:匹配字符串的开头^
和"
。如果字符串不是以a开头"
,则表达式在此处已经失败,并且不会替换任何内容。(.+(?="$))
:匹配(并捕获)所有内容,包括一次或多次使用双引号,但前提是正向提前(?="$)
:正向前瞻与上面的非常相似,只是它指定"
必须为字符串的结尾($
=== end)"$
:匹配该结束引号,但不捕获它替换的方式与之前相同:我们将匹配项(包括开始和结束引号)替换为其中的所有内容。
您可能已经注意到我省略了该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
。容易豌豆。
温馨提示:
可以在这里找到更多有关环视断言的信息。Regex
非常有用(和IMO一样有趣),乍一看可能令人费解。这里有更多详细信息,以及与此事件相关的资源链接。
如果您现在还不太习惯使用正则表达式,则可以考虑使用:
var noQuotes = someStr.split('"').join('');
如果字符串中有很多引号,这甚至可能比使用正则表达式更快
如果保证要删除的字符串在开头和结尾都有一个引号(或任何其他单个字符),请执行以下操作:
str = str.slice(1, -1);
slice
比正则表达式具有更少的开销。
<uri>
和文字一样"literal"
)。所以这是一个赞。;)
如果您可以控制数据,并且知道双引号括在字符串内(因此不要出现在字符串内),并且该字符串是整数,则用...说:
"20151212211647278"
或类似的东西很好地删除了周围的引号
JSON.parse("20151212211647278");
不是一个通用的答案,但满足利基需求
JSON.parse("20151212211647278dfvs");
SyntaxError: Unexpected token d in JSON at position 17
如果只想删除边界引号:
function stripquotes(a) {
if (a.charAt(0) === '"' && a.charAt(a.length-1) === '"') {
return a.substr(1, a.length-2);
}
return a;
}
如果看起来不像,这种方法就不会碰到字符串"text in quotes"
。
a.charAt(x)
,如果你想<ECMA5支持(f.ex IE7)。
以更容易将其表达为正则表达式的方式来重新陈述您的问题:
获取包含在零个或一个前导双引号和零个或一个后缀双引号之间的字符子串。
这是执行此操作的正则表达式:
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'
这有效...
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));
'foo"
或简单地进行操作foo"
如果要删除字符串中的所有双引号,请使用
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