Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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_String_Substring - Fatal编程技术网

包含可变内容的字符串的JavaScript子字符串

包含可变内容的字符串的JavaScript子字符串,javascript,string,substring,Javascript,String,Substring,我有一个可以包含各种信息的字符串,当我不能确定GUID在字符串中的位置时,我需要从这个字符串中生成一个GUID子字符串 字符串的可能版本 stringVar=电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6 stringVar=电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6&host=HOSTNAME stringVar=电子邮件:name@com

我有一个可以包含各种信息的字符串,当我不能确定GUID在字符串中的位置时,我需要从这个字符串中生成一个GUID子字符串

字符串的可能版本

stringVar=电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6

stringVar=电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6&host=HOSTNAME

stringVar=电子邮件:name@company.com&地点=某地&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6

还有一些其他的字符串排列,其中包含更多或更少的字段,它将始终至少包含GUID

我所拥有的东西的粗略版本:

var room = str.substring(str.lastIndex(room),str.lastIndex(;))
if room.length !== 36
    var room = str.substring(str.lastIndex(room),str.lastIndexOf(&)
一定有更干净的方法吗

一定有更干净的方法吗

有-正则表达式

var guid = str.match(/room:([^&]+)/);
如果找到匹配项,则该匹配项将位于
guid[0]
中,而仅在
guid[1]
中使用guid(减去“room:”)

一定有更干净的方法吗

有-正则表达式

var guid = str.match(/room:([^&]+)/);

如果找到匹配项,则该匹配项将位于
guid[0]
中,在
guid[1]
中仅使用guid(减去“room:”)

您可以使用字符串操作,例如:

var stringVar1=“电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6”;
var stringVar2=“电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6&host=HOSTNAME”;
var stringVar3=“电子邮件:name@company.com&位置=某地和房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6”;
函数getRoomId(输入){
返回输入
.split(&)//分成块
.find(part=>part.startsWith(“room:”)//查看哪个以room开头
.split(“:”[1];//拆分并返回第二部分,即GUID
}
log(getRoomId(stringVar1));
log(getRoomId(stringVar2));

log(getRoomId(stringVar3))您可以只使用字符串操作,例如:

var stringVar1=“电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6”;
var stringVar2=“电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6&host=HOSTNAME”;
var stringVar3=“电子邮件:name@company.com&位置=某地和房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6”;
函数getRoomId(输入){
返回输入
.split(&)//分成块
.find(part=>part.startsWith(“room:”)//查看哪个以room开头
.split(“:”[1];//拆分并返回第二部分,即GUID
}
log(getRoomId(stringVar1));
log(getRoomId(stringVar2));
log(getRoomId(stringVar3))使用此正则表达式

/(room:[a-zA-Z0-9]+\-[a-zA-Z0-9]+\-[a-zA-Z0-9]+\-[0-9]+\-[a-zA-Z0-9]+)/
这将与以下数据相匹配:

room:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6  
room:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6  
room:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6  
以下是匹配项:

使用此正则表达式

/(room:[a-zA-Z0-9]+\-[a-zA-Z0-9]+\-[a-zA-Z0-9]+\-[0-9]+\-[a-zA-Z0-9]+)/
这将与以下数据相匹配:

room:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6  
room:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6  
room:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6  

下面是匹配项:

正则表达式是一个不错的选择,但它会使代码难以阅读

var stringValue=“stringVar=电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6&host=HOSTNAME;”
var模式=/[\da-zA-Z]{8}-([\da-zA-Z]{4}-{3}[\da-zA-Z]{12}/;
var found=stringValue.match(模式)

console.log(找到[0])正则表达式是一个很好的选择,但它使代码难以阅读

var stringValue=“stringVar=电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6&host=HOSTNAME;”
var模式=/[\da-zA-Z]{8}-([\da-zA-Z]{4}-{3}[\da-zA-Z]{12}/;
var found=stringValue.match(模式)

console.log(找到[0])您的“房间”guid仅包含十六进制字符。使用简单的匹配正则表达式捕获所需内容:

/&room:([a-f\d-]+)/i
如果
room
可能显示为字符串中的第一个字段(在其开头),则您也可以增强它以匹配字符串开头的字段:

/(?:^|&)room:([a-f\d-]+)/i
  ^^^^

详细信息

  • &room:
    -匹配文字字符序列
    &room:
    (?:^ |&)
是一个交替组,用于匹配起始字符串位置(
^
)或(
|
)符号)
  • ([a-f\d-]+)
    -将
    a-f
    a-f
    范围内的一个或多个ASCII字母(因为
    /i
    是不区分大小写的模式修饰符)、数字(
    \d
    )或
    -
    匹配并捕获到组1中
  • var strngs=['stringVar=email:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6;','stringVar=电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6&host=HOSTNAME;','stringVar=email:name@company.com&地点=某地和房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6;'];
    变量re=/&room:([a-f\d-]+)/i;
    用于(STRNG的var s){
    var res=(m=s.match(re))?m[1]:“”;
    console.log(s+“\n=>\n”+res);//演示
    
    }
    您的“房间”guid仅包含十六进制字符。使用简单的匹配正则表达式捕获所需内容:

    /&room:([a-f\d-]+)/i
    
    如果
    room
    可能显示为字符串中的第一个字段(在其开头),则您也可以增强它以匹配字符串开头的字段:

    /(?:^|&)room:([a-f\d-]+)/i
      ^^^^
    

    详细信息

    • &room:
      -匹配文字字符序列
      &room:
      (?:^ |&)
    是一个交替组,用于匹配起始字符串位置(
    ^
    )或(
    |
    )符号)
  • ([a-f\d-]+)
    -将
    a-f
    a-f
    范围内的一个或多个ASCII字母(因为
    /i
    是不区分大小写的模式修饰符)、数字(
    \d
    )或
    -
    匹配并捕获到组1中
  • var strngs=['stringVar=email:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6;','stringVar=电子邮件:name@company.com&房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6&host=HOSTNAME;','stringVar=email:name@company.com&地点=某地和房间:b83edd0d-fec5-4ec0-8055-60bc0d8eb4b6;'];
    变量re=/&room:([a-f\d-]+)/i;
    用于(STRNG的var s){
    var res=(m=s.match(re))?m[1]:“”;
    console.log(s+“\n=>\n”+res)