我有一个包含文本内电话号码的字符串。该电话号码由特殊字符包裹。
示例: 特殊字符是'
你好'12345'世界
Hello World'12345'
'12345'Hello World
我要处理字符串和具有两个属性的对象,即电话号码和消息文本。
示例结果将是
{
phonenumber: "12345",
announcement: "Hello World"
}
我试图为此创建解决方案
const identificationCharacter = "'";
const exampleText = "Hello '12345' World";
const phoneInfo = inspect(exampleText);
console.log(phoneInfo);
function inspect(text) {
const firstIndex = text.indexOf(identificationCharacter);
const secondIndex = text.lastIndexOf(identificationCharacter) + 1;
const phoneString = text.substring(firstIndex, secondIndex);
const phoneNumber = phoneString.substring(1, phoneString.length - 1);
const announcement = text.replace(phoneString, "");
return {
phoneNumber,
announcement
}
}
但我认为这不是一个好的解决方案。有更好的方法吗?
答案 0 :(得分:3)
您也可以在.split
旁加上',然后将最后一部分和第一部分相加:
const [first, phoneNumber, last] = exampleText.split("'").map(it => it.trim());
return {
phoneNumber,
anouncement: first + " " + last,
};
答案 1 :(得分:2)
您可以使用正则表达式,将左右部分作为announcement
,将中间部分作为phonenumber
。
console.log(["Hello '12345' World", "'Hello World '12345'", "'12345' Hello World"].map(s => {
var [, left, phonenumber, right] = s.match(/^(.*)'(.+)'(.*)$/).map(s => s.trim());
return { phonenumber, announcement: (left + ' ' + right).trim() };
}));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:1)
一种方法是使用替换和映射
let str = `Hello '12345' World
Hello World '12345'
'12345' Hello World`
let op = []
let rep = str.replace(/'(\d+)'/gm, function(match,g1){
op.push(g1)
return '';
})
let final = rep.split('\n').map((e,index)=>({
accountNumber: op[index],
accountName: e.trim()
}))
console.log(final)
答案 3 :(得分:1)
尝试使用正则表达式:可能是您可以在匹配后修剪组值,但是该方法有效...
var regex = /(.*)'(.*)'(.*)/
var input0 = "Hello '12345' World"
var result0 = input0.replace(regex, "{ phonenumber: \"$2\", announcement: \"$1$3\" }")
console.log(result0)
var input1 = "Hello World '12345'"
var result1 = input1.replace(regex, "{ phonenumber: \"$2\", announcement: \"$1$3\" }")
console.log(result1)
var input2 = "'12345' Hello World"
var result2 = input2.replace(regex, "{ phonenumber: \"$2\", announcement: \"$1$3\" }")
console.log(result2)
编辑
EXPLANATION
var regex = /(.*)'(.*)'(.*)/
/.../
定义一个正则表达式.*
表示一个字符串,该字符串可以是任意字符,并且可以是任意长度(expr)
匹配expr
并使匹配的值可作为$i
访问(其中i
是(...)
的从1开始的索引,顺序为服饰"a string".replace(aRegex, "a replacement")
尝试将aRegex
与"a string"
进行匹配,将匹配项替换为"a replacement"
,其中可以包含$1
,$2
,... 答案 4 :(得分:1)
在回应评论时,我尝试概括我以前的答案:
function convert(input, separator = "'") {
var regex = new RegExp(`(.*)[${separator}](.*)[${separator}](.*)`)
return input.replace(regex, "{ phonenumber: \"$2\", announcement: \"$1$3\" }")
}
console.log(convert("Hello '12345' World"))
console.log(convert("Hello +12345+ World", '+'))