Javascript 将“ ' ”替换为“ '' ”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9499075/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Javascript replace " ' " with " '' "
提问by user1176926
I'm trying to replace the "'" character with the "''" string using the replace method, like this:
我正在尝试使用替换方法将“'”字符替换为“''”字符串,如下所示:
temp.replace("\'", "''");
but it seems that it is not replacing anything. how should I write the command in order to replace the wanted character with the wanted string (I'm trying to replace it in the next xml):
但它似乎并没有取代任何东西。我应该如何编写命令以便用想要的字符串替换想要的字符(我试图在下一个 xml 中替换它):
<Module ForceTabs="1">
<Events>
<Event Value="onafter_moduleinit_beforedraw()" Type="onafter_moduleinit_beforedraw"/>
</Events>
<Section Id="Header" Type="header" Caption="Header" ContainerCSS="background:#C1E0F4;border-bottom:2px groove;margin-bottom:3px;padding:10 3 3 3">
<Containers>
<Form Id="Header" Caption="General Details" Source="Request" Layout="Fixed">
<Layout>
<table cellaspacing="0" cellpadding="0">
<tr>
<td>
<ControlRef Id="Origin" ShowCaption="1"/>
</td>
<td>
<ControlRef Id="Type" ShowCaption="1"/>
</td>
<td>
<ControlRef Id="Process" ShowCaption="1"/>
</td>
<td width="20" align="center">
<span class="separator"/>
</td>
<td>
<ControlRef Id="FindBy" ShowCaption="1"/>
</td>
<td>
<ControlRef Id="Find"/>
</td>
<td>
<button width="30" onclick="doFindCustomer()">
<Caption Caption="GO"/>
</button>
</td>
</tr>
</table>
</Layout>
<Controls>
<Control Id="Origin" Caption="Origin" FieldName="Origin" DataType="string" Width="90" CaptionWidth="70" ReadOnly="1" Mandatory="1" Hidden="1"/>
<Control Id="Type" Caption="Type" FieldName="Type" DataType="select" Width="60" CaptionWidth="40" ReadOnly="1" Mandatory="1" DefaultValue="Service" Hidden="1">
<Member Value="Allert" Caption="Allert"/>
<Member Value="Service" Caption="Service"/>
<Member Value="Marketing" Caption="Marketing"/>
</Control>
<Control Id="Process" Caption="Process" FieldName="Process" DataType="string" Width="90" CaptionWidth="70" ReadOnly="1" Mandatory="1" Hidden="1"/>
<Control Id="FindBy" Caption="Find:" VCaption="Find By" FieldName="FindBy" DataType="select" Width="90" CaptionWidth="50" ReadOnly="0" Mandatory="0" CaptionCSS="font-weight:bold" DefaultValue="IMTSI">
<Member Value="IMTSI" Caption="IMTSI"/>
<Member Value="ID" Caption="ID"/>
</Control>
<Control Id="Find" Caption="Find Value" FieldName="Find" DataType="string" Width="90" CaptionWidth="60" ReadOnly="0" Mandatory="0" CaptionCSS="font-weight:bold"/>
</Controls>
</Form>
</Containers>
</Section>
<Section Id="1" Type="page" Caption="Message Details">
<Containers>
<Form Id="General" Caption="General Details" Source="Request" Layout="Fixed">
<Controls>
<Control Id="MessageType" Caption="Message Type" Source="Param[@Name = 'MessageType']" FieldName="Value" DataType="select" Width="150" CaptionWidth="120" ReadOnly="1" Mandatory="1" DefaultValue="Allert" Action="handleMessageTypeChange()" BreakAfter="0">
<Member Value="SMS" Caption="SMS"/>
<Member Value="EMAIL" Caption="EMAIL"/>
<Member Value="ATOS" Caption="ATOS"/>
<Member Value="SELF SERVICE" Caption="SELF SERVICE"/>
</Control>
<Control Id="Language" Caption="Language" Source="Param[@Name = 'Language']" FieldName="Value" DataType="string" Width="100" CaptionWidth="90" ReadOnly="1" BreakAfter="1"/>
<Control Id="FirstName" Caption="First Name" Source="Param[@Name = 'FirstName']" FieldName="Value" DataType="string" Width="350" CaptionWidth="120" BreakAfter="1"/>
<Control Id="LastName" Caption="Last Name" Source="Param[@Name = 'LastName']" FieldName="Value" DataType="string" Width="350" CaptionWidth="120" BreakAfter="1"/>
<Control Id="IMTSI" Caption="IMTSI" Source="Param[@Name = 'IMTSI']" FieldName="Value" DataType="string" Width="350" CaptionWidth="120" BreakAfter="1" Mandatory="0"/>
<Control Id="Mobile" Caption="Mobile" Source="Param[@Name = 'Mobile']" FieldName="Value" DataType="string" Width="350" CaptionWidth="120" BreakAfter="1" Mandatory="1"/>
<Control Id="Email" Caption="Email" Source="Param[@Name = 'Email']" FieldName="Value" DataType="string" Width="350" CaptionWidth="120" BreakAfter="1" Mandatory="0"/>
<Control Id="Subject" Caption="Subject" Source="Param[@Name = 'Subject']" FieldName="Value" DataType="string" Width="350" CaptionWidth="120" BreakAfter="1" MaxLen="40" Hidden="1"/>
<Control Id="Content" Caption="Content" Source="Param[@Name = 'Content']" FieldName="Value" DataType="longstring" Width="350" CaptionWidth="120" Height="60" BreakAfter="1" MaxLen="50" Mandatory="1" SeparateBefore="1" SeparateAfter="1"/>
<Control Id="Sender" Caption="Sender" Source="Param[@Name = 'Sender']" FieldName="Value" DataType="string" Width="350" CaptionWidth="120" ReadOnly="1" BreakAfter="1"/>
<Control Id="Priority" Caption="Priority" Source="Param[@Name = 'Priority']" FieldName="Value" DataType="select" Width="350" CaptionWidth="120" BreakAfter="1" DefaultValue="LOW">
<Member Value="LOW" Caption="Low" Glyf="../../GUIGenerator_V2/assets/themes/Images/flag_blue.png"/>
<Member Value="MED" Caption="Medium" Glyf="../../GUIGenerator_V2/assets/themes/Images/flag_yellow.png"/>
<Member Value="HIGH" Caption="High" Glyf="../../GUIGenerator_V2/assets/themes/Images/flag_red.png"/>
</Control>
</Controls>
</Form>
</Containers>
</Section>
</Module>
I must replace the single to two singles i can't change it to " but to ''
我必须将单曲替换为两个单曲,我不能将其更改为“而是”
采纳答案by gabitzish
while (str.indexOf("'") >= 0)
{
var newStr = str.replace("'", "\"");
str = newStr;
}
回答by Ben Lee
Your code just replaces a single instance (the first one it finds). You should replace all instances. You can do this by using a regular expression and adding a g
flag to the end meaning "global search". Like this:
您的代码只是替换了一个实例(它找到的第一个实例)。您应该替换所有实例。您可以通过使用正则表达式并g
在末尾添加一个表示“全局搜索”的标志来完成此操作。像这样:
temp.replace(/'/g, "''")
Here's a working example: http://jsfiddle.net/Q2Uyv/(type something into the "In" box and click "Convert").
这是一个工作示例:http: //jsfiddle.net/Q2Uyv/(在“In”框中键入内容并单击“Convert”)。
If you are actually trying to replace single quotes with double quotes (instead of doubled sequence of single quotes), do this:
如果你真的想用双引号替换单引号(而不是双引号的单引号),请执行以下操作:
temp.replace(/'/g, '"')
回答by Zoidberg
The problem is that
问题是
temp.replace("\'", "''");
will only replace the first instance of '. To fix this, do the following instead
只会替换 '. 要解决此问题,请执行以下操作
temp.replace(/'/g, "''"));
This will ensure it goes though and replaces all instances of the single quote instead of just the first.
这将确保它通过并替换单引号的所有实例,而不仅仅是第一个。
回答by Elias Van Ootegem
You're actually trying to replace (\'), not just the single quote character. There is no need to escape a single quote in a string delimited by double quotes, because they don't signify the end of a string...
您实际上是在尝试替换 (\'),而不仅仅是单引号字符。没有必要对由双引号分隔的字符串中的单引号进行转义,因为它们并不表示字符串的结尾......
Replace will only replace the first quote matched, unless you're using our old friend Regexp. The downside being Regular Expressions tend to be slow. I haven't checked to see which is faster, but you could try using split:
替换只会替换匹配的第一个引号,除非您使用我们的老朋友 Regexp。正则表达式的缺点往往很慢。我没有检查过哪个更快,但您可以尝试使用 split:
var chunks = temp.split("'").join("''");
test = "string cont'aining single 'quotes".split("'").join("''");//in firebug console
//returns "string cont''aining single ''quotes" as expected
回答by Linus Gustav Larsson Thiel
The trick is quoting each string with the other quote character:
诀窍是用另一个引号字符引用每个字符串:
temp.replace(/'/g, '"');
Edit:Ben Lee is correct about the regex, updated above. However, I still gather it that you want to replace with "
(one double quote), not ''
(two single quotes).
编辑:Ben Lee 关于正则表达式是正确的,上面更新了。但是,我仍然认为您要替换为"
(一个双引号)而不是''
(两个单引号)。
回答by Jesús María
Have you simply tried this?
你只是试过这个吗?
temp.replace("'", "''");
回答by inhan
So it's basically changing the single quote character with 2 single quote characters, right? If that's the case you might wanna use the global flag, g
at the end of ytheitroad Regular Expression andassing it back to your value (temp)
所以它基本上是用2个单引号字符改变单引号字符,对吗?如果是这种情况,您可能想g
在 ytheitroad 正则表达式的末尾使用全局标志并将其分配回您的值(临时)
temp = temp.replace(/'/g,"''");