我想使用 Javascript Regex 而不是split
。
以下是示例字符串:
var str = "123:foo";
当前方法调用:
str.split(":")[1]
这将返回"foo"
,但如果给出的字符串不是:
,则会引发错误。
所以这会引发错误:
var str = "fooblah";
如果是"fooblah"
,我只想返回空字符串。
这应该很简单,但是一直在寻找它,并且无法弄明白。提前谢谢。
答案 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)
以下是使用单个正则表达式的解决方案,以及捕获组中所需的部分:
^[^:]*:([^:]+)