用Javascript正则表达式替换“;拆分”;

Javascript regex to replace "split"

本文关键字:拆分 替换 Javascript 正则表达式      更新时间:2023-09-26

我想使用Javascript Regex而不是split

下面是示例字符串:

var str = "123:foo";

当前方法调用:

str.split(":")[1]

这将返回"foo",但当给定一个没有:的坏字符串时,会引发一个Error。

因此,这将引发一个错误:

var str = "fooblah";

"fooblah"的情况下,我只想返回一个空字符串

这应该很简单,但去寻找它,却找不出来。提前谢谢。

删除冒号(或字符串末尾,如果没有冒号)之前的部分:

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

此regexp的工作原理:

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

正则表达式对您没有帮助。您的错误可能是由于以后尝试使用undefined而导致的。相反,请先检查分割的长度。

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

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

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

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

var str1 = "123:foo", str2 = "fooblah";
var res = function (s) {
  return /:/.test(s) && s.replace(/.*(?=:):/, "") || ""
};
console.log(res(str1), res(str2))

下面是一个使用单个正则表达式的解决方案,其中包含捕获组中所需的部分:

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