0

将具有名称部分单位部分的复杂字符串拆分为两个子字符串的最优雅的 JavaScript/jQuery 解决方案是什么,就像这样?

输入:

var source = "some metric (example) [some unit]";

期望的结果:

var name = "some metric (example)"; //note - no trailing space
var units = "some unit";
4

4 回答 4

2

我可以这样做:

var parts = source.split('[');
var name = parts[0];
var units = parts[1].substring(0, parts[1].length - 1);

演示

于 2013-08-02T10:44:40.193 回答
2

String.prototype.lastIndexOf具有修剪功能之一。

var source = "some metric (example) [some unit]",
    i = source.lastIndexOf('['),
    name = $.trim(source.slice(0, i)),      // "some metric (example)"
    unit = $.trim(source.slice(i + 1, -1)); // "some unit"
于 2013-08-02T10:44:59.263 回答
2

匹配的最简单的正则表达式可能是

(.*)\s\[(.*?)\]

定义为

  • 编号的捕获组(任何字符)
  • 空白
  • 文字'['
  • 一个编号的捕获组(尽可能少的任何字符)
  • 文字']'

Javascript代码

var regex = /(.*)\s\[(.*?)\]/;
var input = "some metric (example) [some unit]";
var result = regex.exec(input);
console.log(result[1])
console.log(result[2])

结果:

some metric (example)
some unit

现场示例:http: //jsfiddle.net/2YNQM/

于 2013-08-02T10:57:25.297 回答
1

您可以在括号上拆分[,然后修剪两个部分以确保没有前导或尾随空格,然后删除]括号

var source = "some metric (example) [some unit]";

var [name, units] = source.replace(']','').split(' [').map(x=>x.trim());

console.log(name);
console.log(units);

于 2013-08-02T10:46:32.517 回答