Javascript 拆分大写字母或数字上的字符串

Javascript 拆分大写字母或数字上的字符串,javascript,regex,typescript,Javascript,Regex,Typescript,我试图用typescript制作一个管道,它可以拆分一个PascalCase字符串,但如果它也可以拆分数字,那就太好了。我还希望它在连续的大写字母上拆分。我有这个管道,它工作得很好,除了它只在Chrome中工作,而不在Firefox中工作,显然只有Chrome支持回溯。如何在不回头的情况下实现这一点 transform(value: string): string { let extracted = ''; if (!value) { re

我试图用typescript制作一个管道,它可以拆分一个PascalCase字符串,但如果它也可以拆分数字,那就太好了。我还希望它在连续的大写字母上拆分。我有这个管道,它工作得很好,除了它只在Chrome中工作,而不在Firefox中工作,显然只有Chrome支持回溯。如何在不回头的情况下实现这一点

transform(value: string): string {
        let extracted = '';
        if (!value) {
            return extracted;
        }

        const regExSplit = value
            .split(new RegExp('(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[0-9])(?=[A-Z][a-z])|(?<=[a-zA-Z])(?=[0-9])'));
        for (let i = 0; i < regExSplit.length; i++) {
            if (i !== regExSplit.length - 1) {
                extracted += `${regExSplit[i]} `;
            } else {
                extracted += regExSplit[i];
            }
        }

        return extracted;
    }
转换(值:字符串):字符串{
让我们来看看‘’;
如果(!值){
提取收益;
}
常量regExSplit=值

.split(新的RegExp(“(?只需将任何大写字母
[A-Z]
或任何数字序列
\d+
替换为一个空格加上我们刚刚匹配的
“$1”
”。我们跳过第一个字母,这样就不会通过在字符串
(?!^)的开头添加一个负前视来在结果字符串的开头添加空格

示例:

let value=“ANET15金额”;
让结果=值。替换(/(?!^)([A-Z]|\d+)/g,“$1”);
console.log(result);
使用更基本的模式并使用空格如何

let str=`ANet15Amount`;
让camel=str.match(/[A-Z]+(?![A-Z])|[A-Z]?[A-Z]+|\d++/g)连接(“”);

console.log(camel);
尝试
[A-Z]?[A-Z]+[A-Z]+[A-Z]+[0-9]+

  • 0或1个大写字母直接后跟1个或多个小写字母
  • 或1个大写字母
  • 或一个或多个数字
发电机试验:

我想这取决于字符串的约定,这可能会增加复杂性

//这里的“时间”和“带”是分开的(示例2)
const str='splittingstringsisfuntimesA10000aaatimeswithfollowup';
//这里的“时间”和“带”是分开的(例3)
const str2='SplittingStringsIsFunTimesA100000aaaTIMESWithCAPITAL5FollowUp';
//1.使用REGEX-MATCH
console.log(
“1.使用正则表达式:\n”,
str
.match(/(\d+|[a-z]+|[a-z][a-z]*)/g)
.加入(“”)
);
//2.使用REGEX-MATCH(保留所有大写字符)
console.log(
“2.使用正则表达式(全部分组):\n”,
str
.match(/(\d+|[a-z]+|[a-z]([a-z]+|[a-z]*))/g)
.加入(“”)
);
//3.使用REGEX-MATCH(保留大写字符,但保留最后一个)
console.log(
“3.使用正则表达式(组但最后一个):\n”,
str2
.匹配(/(\d+|[a-z]+|([a-z]+|([a-z]+(?![a-z])))/g)
.加入(“”)
);
//4.使用分离过滤器
console.log(
“4.使用拆分:\n”,
str2
.split(/(\d+|[A-Z][A-Z]*)/)
.filter(v=>v!='')
.加入(“”)

)替换(/([A-Z]|\d+)/g,“$1”).trim();
@ibrahimmahrir
(?!^)([A-Z]|\d+)
避免了第一个空格,不需要修剪。太棒了,通过了我所有的测试用例。我同意,你的更准确。我真的很感激!@develmatik很高兴它能按预期工作,我刚刚读到了Camel与:)之间的区别
// ...

return value.replace(/(?!^)([A-Z]|\d+)/g, " $1");