在Javascript中拆分时,如何忽略两个已知字符串之间的可变字符串长度?
我是JavaScript的新手,一般来说,我是一个编程新手,但我正在尽可能地自学 我试图从变量字符串中提取数据。原始字符串的格式如下:在Javascript中拆分时,如何忽略两个已知字符串之间的可变字符串长度?,javascript,regex,string,split,Javascript,Regex,String,Split,我是JavaScript的新手,一般来说,我是一个编程新手,但我正在尽可能地自学 我试图从变量字符串中提取数据。原始字符串的格式如下: CAMERA NAME(NUM): North West Rd(D1) CAMERA NAME(NUM): Even Longer Camera Name(D2) CAMERA NAME(NUM): Cam13(D13) 我想要的只是最后括号内的字符串。我希望有一个分裂的功能,我可以说一些沿着 str.split(CAMERA NAME(NUM
CAMERA NAME(NUM): North West Rd(D1)
CAMERA NAME(NUM): Even Longer Camera Name(D2)
CAMERA NAME(NUM): Cam13(D13)
我想要的只是最后括号内的字符串。我希望有一个分裂的功能,我可以说一些沿着
str.split(CAMERA NAME(NUM): **variable Characters and length** (,);
但我不确定如何解释变量文本和长度(NUM):和(
如果有任何建议,我将不胜感激,谢谢
另外,我目前正在使用这种有效的方法,但我想知道如何为未来的项目解释变量字符串,因为这几乎肯定会再次出现
多谢各位。
卢克
var txt=msg.payload;
var数组=[];
var newText=txt.split('(');
//node.warn(newText);
对于(变量i=1;i
如果您的结果与您提供的示例完全相同,您可以使用一行代码来实现这一点:
let val=“摄像机名称(编号):西北路(D1)”
让res=val.split(“”.pop().replace(“”),“”)
console.log(res)
使用正则表达式:
const aCamera=[
“摄像机名称(编号):西北路(D1)”,
“摄像机名称(NUM):甚至更长的摄像机名称(D2)”,
“摄像机名称(编号):Cam13(D13)”
];
常量oRegex=/\([A-Za-z0-9]+)\)$/;
aCamera.forEach(sCamName=>{
设aResult=sCamName.match(oRegex);
if(aResult&&aResult[1]){//检查是否有结果
console.log(aResult[1]);
}
});
使用正则表达式:
const val = 'CAMERA NAME(NUM): Even Longer Camera Name(D2)';
const id = val.replace(/^.+\((.+)\)$/, '$1');
正如您提到的,有两个部分,您可以匹配这两个部分,确保在捕获组中的最后一个部分时它们都在
\([^()]+\):.*\(([^()]+)\)$
匹配以\([^()]+\):
结尾的括号部分:
可以选择匹配任何字符(变量部分)*
匹配\([^()]+)\
,在组1中捕获除括号外的任何字符,并匹配(
)
字符串结尾$
const regex=/\([^()]+\):.*\([^()]+\)$/gm;
const s=`摄像机名称(NUM):西北路(D1)
摄像机名称(NUM):甚至更长的摄像机名称(D2)
摄像机名称(编号):Cam13(D13)`;
log(Array.from(s.matchAll(regex),m=>m[1]);
我将使用regex解决这个问题。
您可以使用
//将所有相关信息移动到组中
var regex=/([^\n()]+)\([^()]+)\:\s*([^()]+)\([^()]+)\([^()]+)\)/g;
//([^\n()]+):移动组中不是换行符或制动器的所有字符
//\([^()]+)\:将所有包装在制动器中的字符移动到一个组中
var test=`摄像机名称(NUM):西北路(D1)
摄像机名称(NUM):甚至更长的摄像机名称(D2)
摄像机名称(编号):Cam13(D13)`;
var摄像机=[];
var match=regex.exec(测试);
while(比赛){
//属性可以根据需要进行更改
照相机,推({
名称:匹配[1],
num:匹配[2],
位置:匹配[3],
locationTag:匹配[4]
});
match=regex.exec(测试);
}
控制台日志(摄像头);
//现在,您可以迭代摄影机阵列并轻松读取信息
使用正则表达式,Luke。例如,^.+\((.+)\$
在我看来是最简单、最有效的。将*
更改为+
,并确保在执行[1]
之前找到匹配项,因为执行[1]on null将抛出一个错误。@CasimiretHippolyte它还需要大括号内的一组字符,而OP没有提到这样的条件。@some:可以使用以下方法解决:aArray.reduce((c,s)=>{m=s.match(regex);返回m?[…c,m[1]]:c},[])
@Alnitak:这不是什么问题,可以很容易地将字符类更改为您想要的任何类型。这里最重要的是,模式直接以文字括号开始,而不需要尝试检查字符串的开头。
\([^()]+\):.*\(([^()]+)\)$