Javascript正则表达式替换" split"

时间:2015-12-08 18:17:41

标签: javascript regex

我想使用 Javascript Regex 而不是split

以下是示例字符串:

var str = "123:foo";

当前方法调用:

str.split(":")[1]

这将返回"foo",但如果给出的字符串不是:,则会引发错误。

所以这会引发错误:

var str = "fooblah";

如果是"fooblah",我只想返回空字符串

这应该很简单,但是一直在寻找它,并且无法弄明白。提前谢谢。

5 个答案:

答案 0 :(得分:3)

将部分移除并包括冒号(如果没有冒号,则删除字符串的末尾):

"123:foo".replace(/.*?(:|$)/, '')    // "foo"
"foobar" .replace(/.*?(:|$)/, '')    // ""

此正则表达式的工作原理:

.*                 Grab everything
?                  non-greedily
(                  until we come to
  :                a colon
  |                or 
  $                the end of the string
)

答案 1 :(得分:2)

正则表达式不会帮助你。您的错误可能是因为稍后尝试使用undefined而产生的。而是先检查分割的长度。

var arr = str.split(':');
if (arr.length < 2) {
  // Do something to handle a bad string
} else {
  var match = arr[1];
  ...
}

答案 2 :(得分:2)

这是我一直使用的,有不同的变化;这只是它的一个简单版本:

function split(str, d) {
    var op = "";
    if(str.indexOf(d) > 0) {
        op = str.split(d);
    }
    return(op);
}

相当简单,要么返回一个数组,要么返回一个空字符串。

答案 3 :(得分:1)

var str1 = "123:foo", str2 = "fooblah";

var res = function (s) {
  return /:/.test(s) && s.replace(/.*(?=:):/, "") || ""
};

console.log(res(str1), res(str2))

答案 4 :(得分:0)

以下是使用单个正则表达式的解决方案,以及捕获组中所需的部分:

^[^:]*:([^:]+)