javascript - split正则 - node js分割字符串




仅在指定字符的第一个实例上拆分字符串 (8)

Mark F的解决方案非常棒,但旧版浏览器不支持。 Kennebec的解决方案非常棒,并且支持旧版浏览器,但不支持正则表达式。

因此,如果您正在寻找一种解决方案,它只会将您的字符串拆分一次,旧式浏览器也支持这种解决方案,并支持正则表达式,下面是我的解决方案:

String.prototype.splitOnce = function(regex)
{
    var match = this.match(regex);
    if(match)
    {
        var match_i = this.indexOf(match[0]);
        
        return [this.substring(0, match_i),
        this.substring(match_i + match[0].length)];
    }
    else
    { return [this, ""]; }
}

var str = "something/////another thing///again";

alert(str.splitOnce(/\/+/)[1]);

在我的代码中,我基于_分割一个字符串,并获取数组中的第二项。

var element = $(this).attr('class');
var field = element.split('_')[1];

good_luck并为我提供luck 。 很棒!

但是,现在我有一个看起来像good_luck_buddy 。 如何让我的javascript忽略第二个_并给我luck_buddy

我发现这个var field = element.split(new char [] {'_'}, 2); 在ac#stackoverflow答案但它不起作用。 我在jsFiddle试过了...


不幸的是,Javascript的String.split无法限制分割的实际数量。 它有第二个参数,它指定了多少实际分割项目被返回,这在你的情况下是没有用的。 解决方法是分割字符串,关闭第一个项目,然后重新加入其余项目::

var element = $(this).attr('class');
var parts = element.split('_');

parts.shift(); // removes the first item from the array
var field = parts.join('_');

使用捕获圆括号

"good_luck_buddy".split(/_(.+)/)[1]
"luck_buddy"

它们被定义为

如果separator包含捕获括号,则匹配结果将返回到数组中。

因此,在这种情况下,我们想要在_.+分割(即分割分隔符是以_开头的子字符串), 但也要让结果包含分隔符的一部分(即_之后的所有内容 )。

在这个例子中,我们的分隔符(匹配_(.+) )是_luck_buddy ,捕获的组(分隔符内)是lucky_buddy 。 如果没有捕获括号, luck_buddy (匹配.+ )将不会包含在结果数组中,因为它是简单split的情况,分隔符不包含在结果中。


使用带regex的字符串replace()方法:

document.body.innerHTML = "good_luck_buddy".replace(/.*?_/, "");

这个正则表达式匹配第一个_之前的0个或更多字符,以及_本身。 然后匹配被替换为空字符串。


将第一个实例替换为一个唯一的占位符,然后从那里拆分。

"good_luck_buddy".replace(/\_/,'&').split('&')

["good","luck_buddy"]

当需要拆分的双方时,这更有用。


您可以使用正则表达式,如:

var arr = element.split(/_(.*)/)
您可以使用第二个参数来指定分割的限制。 即:var field = element.split('_',1)[1];

我需要字符串的两个部分,所以,正则表达式向后帮助我。

const full_name = 'Maria do Bairro';
const [first_name, last_name] = full_name.split(/(?<=^[^ ]+) /);
console.log(first_name);
console.log(last_name);


这在Chrome + FF上适用于我:

"foo=bar=beer".split(/^[^=]+=/)[1] // "bar=beer"
"foo==".split(/^[^=]+=/)[1] // "="
"foo=".split(/^[^=]+=/)[1] // ""
"foo".split(/^[^=]+=/)[1] // undefined

如果你还需要这个键,试试这个:

"foo=bar=beer".split(/^([^=]+)=/) // Array [ "", "foo", "bar=beer" ]
"foo==".split(/^([^=]+)=/) // [ "", "foo", "=" ]
"foo=".split(/^([^=]+)=/) // [ "", "foo", "" ]
"foo".split(/^([^=]+)=/) // [ "foo" ]

//[0] = ignored (holds the string when there's no =, empty otherwise)
//[1] = hold the key (if any)
//[2] = hold the value (if any)




regex