我想删除字符串周围的""。
""
例如,如果字符串是:"I am here",那么我只想输出I am here。
"I am here"
I am here
假设:
var someStr = 'He said "Hello, my name is Foo"'; console.log(someStr.replace(/['"]+/g, ''));
这应该能奏效……(如果你的目标是替换所有双引号)。
下面是它的工作原理:
['"]
"
+
g
如果您试图删除给定字符串周围的引号(即成对),事情会变得有点棘手。你必须使用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
正则表达式解释道:
(
()
[^"]+
(?=")
)
'$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。
remove "foo" delimiting "
"remove "foo" delimiting quotes"
remove "foo" delimiting quotes
解释:
^"
^
(.+(?="$))
(?="$)
$
"$
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。
substr
charAt(str.length -1)
str.length - 2
提示:
更多关于lookaround断言可以在这里找到 正则表达式非常有用(在我看来也很有趣),一开始可能会有点困惑。这里有更多的细节和资源链接关于这个问题。 如果你还不太习惯使用正则表达式,你可能会考虑使用:
var noQuotes = someStr.split('"').join('');
如果字符串中有很多引号,这甚至可能比使用regex更快
如果你只想删除边界引号:
function stripquotes(a) { if (a.charAt(0) === '"' && a.charAt(a.length-1) === '"') { return a.substr(1, a.length-2); } return a; }
如果字符串不像"text in quotes",此方法将不会触及字符串。
"text in quotes"
如果只想从开头或结尾删除引号,请使用以下正则表达式:
'"Hello"'.replace(/(^"|"$)/g, '');
如果要删除字符串中的所有双引号,请使用
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
str = str.replace(/^"(.*)"$/, '$1');
只有当引号是字符串的第一个和最后一个字符时,这个regexp才会删除引号。F.ex:
"I am here" => I am here (replaced) I "am" here => I "am" here (untouched) I am here" => I am here" (untouched)
以一种更容易用正则表达式表达的方式重申你的问题:
获取包含在0或1个开头双引号和0或1个结尾双引号之间的字符的子字符串。
下面是执行此操作的regexp:
var regexp = /^"?(.+?)"?$/; var newStr = str.replace(/^"?(.+?)"?$/,'$1');
分解regexp:
^"?
"?$
(.+?)
$1
这将返回delimited "string" here用于:
delimited "string" here
str = "delimited "string" here" // ... str = '"delimited "string" here"' // ... str = 'delimited "string" here"' // ... and str = '"delimited "string" here'
这个简单的代码也可以工作,例如从双引号包围的字符串中删除双引号:
var str = 'remove "foo" delimiting double quotes'; console.log(str.replace(/"(.+)"/g, '$1'));
如果你可以控制你的数据,你知道你的双引号包围字符串(所以不出现在字符串中),字符串是一个整数…用:
"20151212211647278"
或者类似的,这很好地删除了周围的引号
JSON.parse("20151212211647278");
这不是一个通用的答案,但巧妙地满足了利基需求
这是为懒人设计的一款简单的工具
var str = '"a string"'; str = str.replace(/^"|"$/g, '');
如果字符串保证在开头和结尾有一个引号(或任何其他单个字符),你想删除:
str = str.slice(1, -1);
slice的开销比正则表达式小得多。
slice
这工作…
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));
var expressionWithoutQuotes = ''; for(var i =0; i<length;i++){ if(expressionDiv.charAt(i) != '"'){ expressionWithoutQuotes += expressionDiv.charAt(i); } }
这可能对你有用。
请尝试使用regex从字符串中删除双引号。
$string = "I am here"; $string =~ tr/"//d; print $string; exit();
如果您试图删除双引号,请尝试以下操作
var Stringstr = "\"I am here\""; var mystring = String(Stringstr); mystring = mystring.substring(1, mystring.length - 1); alert(mystring);
这段代码是非常好的显示数字在文本框
$(this) =[你的文本框]
var number = $(this).val(); number = number.replace(/[',]+/g, ''); number = number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); $(this).val(number); // "1,234,567,890"
如果你想要守旧,请使用REGEX 1,$s/"//g