Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中拆分时,如何忽略两个已知字符串之间的可变字符串长度?_Javascript_Regex_String_Split - Fatal编程技术网

在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

我是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):    **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:这不是什么问题,可以很容易地将字符类更改为您想要的任何类型。这里最重要的是,模式直接以文字括号开始,而不需要尝试检查字符串的开头。
\([^()]+\):.*\(([^()]+)\)$