【问题标题】:How to get value between particular characters如何在特定字符之间获取值
【发布时间】:2013-12-11 09:49:53
【问题描述】:

我有一个像"abc('x','y','zzz')" 这样的字符串,我希望从中获取一个包含“x”、“y”和“zzz”的字符串数组(即'(单引号)之间的字符串)。我必须在 javascript 中执行此操作。

使用 substring 方法来做到这一点并不容易。我希望得到一个方法,它从传递的字符串中返回' (single quote) 之间的字符数组。

【问题讨论】:

  • 单引号是否有可能被转义'a\'bc'
  • @HamZa:不,基本上,字符串是 javascript 中的一个事件,例如 onchange="abc('x','y','zzz')"
  • "字符串是 javascript 中的一个事件,例如 ..." -- 这表明了一个更深层次的问题。 XY 问题?为什么需要准确解析这个?
  • @elclanrs:解释起来会很困难,太大了,这里就不解释了。我已经解释了需要什么的症结:)。
  • 在不了解细节的情况下,这似乎不是正确的方法。如果我的直觉是正确的,那你可能是在浪费时间。对实际问题的描述将增加您获得有见地答案的机会,而不仅仅是快速修复正则表达式。

标签: javascript regex


【解决方案1】:

您可以执行以下操作:

var input = "abc('x','y','zzz')";
input = input.match(/\w+/g); // ["abc", "x", "y", "zzz"]
input = input ? input.slice(1) : []; // ["x", "y", "zzz"]
input = input.length > 1 
    ? input.slice(0, -1).join(', ') + ' and ' + input.pop()
    : input[0] || ''; 
// "x, y and zzz"

包裹在函数内部:

// string -> array
function split(input) {
    input = input.match(/\w+/g);
    return input ? input.slice(1) : []; 
}

// array -> string
function format(input) {
    return input.length > 1 
        ? input.slice(0, -1).join(', ') + ' and ' + input.pop()
        : input[0] || ''; 
}

format(split("abc('x','y','zzz')")); // ["x", "y", "zzz"] -> "x, y and zzz"
format(split("abc('x','y')")); // ["x", "y"] -> "x and y"
format(split("abc()")); // [] -> ""

类似问题:Make a list comma and "and"-separated.

【讨论】:

  • 谢谢,这行得通。但是,我并不是说 and 作为字符串。结果我想要一个数组。相应地改变了它。
  • @Ankit 小心问你的问题,有很多像我这样的人免费为你工作;)
  • @Ankit 也就是说,没有什么可改变的,只使用split
  • 有人编辑了我的问题并在字符串中添加了“(双引号),这使它看起来像我想要它作为字符串。但是,我还写了我想要返回数组的函数。我同意没有什么可以改变的,.slice(1) 只返回一个数组。我不必格式化它。谢谢你的帮助。
  • @Ankit 那是我 :) 事实上,你的问题提到了一个“字符串 x, y 和 zzz”(单数):stackoverflow.com/posts/20515812/revisions。同样,答案是免费的,请怜悯读者:)
【解决方案2】:

如果只有一个这样的匹配,那么:

"abc('x','y','zzz')".replace(/^[^\(]*\(|\).*$/g,'').match(/\w+/g); // ['x','y','zzz']

会的。

【讨论】:

    【解决方案3】:

    对于这个简单的任务,我更喜欢纯正则表达式解决方案,而不是组合多个字符串操作:

    var input = "abc('x','y','zzz')";
    input.match(/(?!')(\w+)(?=')/g) // ["x", "y", "zzz"]
    

    【讨论】:

      【解决方案4】:

      试试这个:

      var str = "abc('x','y','zzz')";
      // remove string before (
      str = str.replace(str.slice(0, str.indexOf('(') + 1),'');
      // remove the last )
      str = str.substr(0,str.length - 1);
      

      现在你有一个字符串'x','y','zzz'。如果你想创建一个数组,试试这个:

      var strArray = str.split(',');
      

      这里是jsfiddle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多