【问题标题】:Javascript replace " ' " with " '' "Javascript 将“'”替换为“''”
【发布时间】:2012-03-18 22:28:10
【问题描述】:

我正在尝试使用替换方法将“'”字符替换为“''”字符串,如下所示:

temp.replace("\'", "''");

但它似乎并没有取代任何东西。我应该如何编写命令以便用想要的字符串替换想要的字符(我正在尝试在下一个 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>

我必须把单曲换成两曲,我不能把它改成“但要''

【问题讨论】:

  • 在这个问题上不乏好的建议,哈哈

标签: javascript xml string replace


【解决方案1】:

您的代码只是替换了一个实例(它找到的第一个实例)。您应该替换所有实例。您可以通过使用正则表达式并在末尾添加 g 标志来完成此操作,意思是“全局搜索”。像这样:

temp.replace(/'/g, "''")

这是一个工作示例:http://jsfiddle.net/Q2Uyv/(在“输入”框中输入一些内容并单击“转换”)。

如果您实际上是在尝试用双引号替换单引号(而不是单引号的双引号序列)​​,请执行以下操作:

temp.replace(/'/g, '"')

【讨论】:

  • @user1176926,我在答案中添加了一个不同的工作示例,您可以在其中输入任何字符串以确认它是否有效。
  • @BenLee 我希望 OP 重新考虑并选择这个答案,因为这是迄今为止最好的一个。
  • @Zoidberg,我什至不在乎 15 个代表或接受的答案,我只是感到震惊的是,当其他所有答案都更容易接受时,最差的选择被选为接受。如果其他有工作答案的人得到复选标记,我会很高兴。 (好吧,我承认“震惊”这个词太强了,但仍然......)
  • @BenLee 是的,这个答案肯定是更糟糕的,而且当有人正在寻找解决这个问题的方法时,这个糟糕的答案作为公认的解决方案出现并不是关于代表的问题问题。
【解决方案2】:

问题是

temp.replace("\'", "''");

只会替换 '.要解决此问题,请改为执行以下操作

temp.replace(/'/g, "''"));

这将确保它通过并替换单引号的所有实例,而不仅仅是第一个。

【讨论】:

    【解决方案3】:

    您实际上是在尝试替换 (\'),而不仅仅是单引号字符。没有必要在由双引号分隔的字符串中转义单引号,因为它们并不表示字符串的结尾......

    替换只会替换匹配的第一个引号,除非您使用我们的老朋友正则表达式。正则表达式的缺点往往很慢。 我还没有检查哪个更快,但你可以尝试使用 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
    

    【讨论】:

      【解决方案4】:

      诀窍是用另一个引号字符引用每个字符串:

      temp.replace(/'/g, '"');
      

      编辑: Ben Lee 关于正则表达式是正确的,上面已更新。但是,我仍然收集到您想要替换为 "(一个双引号),而不是 ''(两个单引号)。

      【讨论】:

        【解决方案5】:

        你试过了吗?

        temp.replace("'", "''");
        

        【讨论】:

        • 那只会替换第一个实例。
        【解决方案6】:

        所以它基本上是用 2 个单引号字符来改变单引号字符,对吗?如果是这种情况,您可能想要使用全局标志,g 在 yoir 正则表达式的末尾将其返回到您的值(临时)

        temp = temp.replace(/'/g,"''");
        

        【讨论】:

          【解决方案7】:
          while (str.indexOf("'") >= 0)
              {
                  var newStr = str.replace("'", "\"");
                  str = newStr;
              }
          

          【讨论】:

          • 我现在有另一个问题,我正在尝试将该 xml 保存在 mssql 中,但收到错误消息,可能是什么问题?
          • 为什么这个答案与所有​​其他更好的答案相反?另外,如果你想用双引号替换单引号,为什么你的问题中的原始代码在替换的第二部分有两个单引号?
          • 哇,这被接受了?这是提出的所有可行替代方案中最差的。它既是最丑陋的,也是效率最低的。我只是希望没有其他人遇到这个问题并来到这个页面看到这个并认为这是不看其他答案的正确方法。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-25
          • 2018-05-17
          • 1970-01-01
          相关资源
          最近更新 更多