如何将一个动态(变化)的字符串分解成两个不同的部分?

问题描述 投票:0回答:2

我有一个字段从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"
javascript html regex
2个回答
1
投票

一个简单的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

0
投票

你可以用... split() 方法,将你的字符串 "分割 "成一个字符串数组。

例如

var str = "hello sir";
var arrayOfStrings = str.split(" ");

所以现在 arrayOfStrings[0] 含有 "hello",而 arrayOfStrings[1] 含有 "先生 "字样

© www.soinside.com 2019 - 2024. All rights reserved.