我有一个字段从API响应给我的数据,如 "欢迎名称 "或它可以是 "欢迎回来的名字"。名字可以是名字、中间名、最后名的任意组合。我想把它分成两个部分。
1 - "欢迎 "或 "欢迎回来"(根据API的响应)。
2 - "姓名"
for example :
if data is "Welcome Aman Pratap Singh" break into 1-"Welcome" 2-"Aman Pratap Singh"
if data is "Welcome back ABCDE PQR XYZ" break into 1-"Welcome back" 2-"ABCDE PQR XYZ"
if data is "Welcome ABC XYZ" break into 1-"Welcome" 2-"ABC XYZ"
if data is "Welcome back ABC XYZ" break into 1-"Welcome back" 2-"ABC XYZ"
if data is "Welcome ABCDE" break into 1-"Welcome" 2-"ABCDE"
if data is "Welcome back ABCDE" break into 1-"Welcome back" 2-"ABCDE"
一个简单的regex应该可以做到这一点。
let splitWelcomeStr = str => {
let match = str.match(/^(Welcome( back)?) (.+)$/);
if (!match) throw new Error('Invalid welcome string provided');
return { welcome: match[1], name: match[3] };
};
console.log(splitWelcomeStr('Welcome John'));
console.log(splitWelcomeStr('Welcome John Doe'));
console.log(splitWelcomeStr('Welcome John H. Doe'));
console.log(splitWelcomeStr('Welcome back John'));
console.log(splitWelcomeStr('Welcome back John Doe'));
console.log(splitWelcomeStr('Welcome back John H. Doe'));
console.log(splitWelcomeStr('Welcome back'));
console.log(splitWelcomeStr('Welcome back back'));
这是对所使用的regex的分解:
^(Welcome( back)?) (.+)$
^ Match the start of the sequence
( ) Create a result at index 1
Welcome The string "Welcome"
( )? An optional string (and a result at index 2)
back The string " back" (prefixed with a space!)
(.+) A space followed by match at index 3 for any further characters
$ Match the end of the sequence
你可以用... split()
方法,将你的字符串 "分割 "成一个字符串数组。
例如
var str = "hello sir";
var arrayOfStrings = str.split(" ");
所以现在 arrayOfStrings[0]
含有 "hello",而 arrayOfStrings[1]
含有 "先生 "字样