【问题标题】:Get text between two words using javascript使用javascript获取两个单词之间的文本
【发布时间】:2012-10-26 01:58:28
【问题描述】:

我有一个字符串,它看起来像一个 XML 文件,但实际上它只是一个保存在变量中的普通字符串。

字符串是这样的:

<m:properties>
             <d:user_id m:type="Edm.Int64">37</d:user_id>
             <d:organization_id m:type="Edm.Int64">1</d:organization_id>
             <d:name>Test</d:name>
             <d:password>81dc9bdb52d04dc20036dbd8313ed055</d:password>
             <d:email_id>test1@cs.com</d:email_id>
             <d:user_type_id m:type="Edm.Int32">3</d:user_type_id>
             <d:is_valid m:type="Edm.Boolean">true</d:is_valid>
             <d:registration_date m:type="Edm.DateTime">2012-10-25T11:20:08</d:registration_date>
           </m:properties>

我需要提取文本:

  1. &lt;d:password&gt; &lt;/d:password&gt;
  2. &lt;d:email_id&gt;&lt;/d:email_id&gt;

&lt;d:password&gt; &lt;/d:password&gt;&lt;d:email_id&gt;&lt;/d:email_id&gt;的内容是动态的。

如何使用javascript字符串处理函数来提取需要的文本?

【问题讨论】:

标签: javascript android string titanium


【解决方案1】:

假设您发布的所有字符串都存储在名为 myCode 的变量中,那么您需要从 myCode 中提取密码和电子邮件

var passwd = myCode.substring(myCode.indexOf("<d:password>")+12,myCode.length-myCode.indexOf("</d:password>"));
var email = myCode.substring(myCode.indexOf("<d:email_id>")+11,myCode.length-myCode.indexOf("</d:email_id>"));

【讨论】:

  • 的长度可能不是静态的。所以在此基础上计算可能不是一个好主意!
  • 我知道,但至少它满足了这个特殊情况的要求,不是吗?
  • 是的,但它不是永久的解决方案,因为它总是在变化。该字符串实际上是一个服务器响应。那么他们有什么方法可以回答特定的复杂性吗?
【解决方案2】:

IF 这个字符串是规则的(即它的结构永远不会改变),那么你可以使用正则表达式,但是它非常接近不规则的 HTML/XML 和正则表达式和不规则的不要在一起。他们并没有太多在一起,以至于如果我什至建议使用正则表达式,我将在随后的投票风暴中失去所有代表。所以...

如果这个字符串是正则的,那么这是一个快速干净的可能解决方案:

String name = text.split(">")[6].split("<")[0];
String password = text.split(">")[8].split("<")[0];

在这里,幻数 6 和 8 是输入字符串中标签的索引。再多做一点工作,您可能会完全失去神奇的数字,但如果结构是固定的,常量可能对它们有用。

或者,丢失幻数,也许更干净(尽管使用幻数作为“名称>”和“密码>”的长度)。

String name = text.substring(text.indexof("name>")+5).split("<")[0];
String password = text.substring(text.indexof("password>")+9).split("<")[0];

这两种方法都适用于任何长度的用户名和密码。

PS。当然,编程的第一条规则是,没有来自代码之外的永远不会改变的结构这样的东西;)

PPS。当我说“任意长度”时,这当然受 Java 和 Dalvik VM 的限制;)

【讨论】:

    【解决方案3】:

    一个非常简单的答案,无需过多关心计数:

    var password = text.split("<d:password>")[1].split("</d:password>")[0];
    var email = text.split("<d:email_id>")[1].split("</d:email_id>")[0];
    

    在这里,您唯一必须确保的是您没有多个相同的标签。如果存在多个,第一个索引会说明您想要哪个出现。另一个仍然是 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多