如何正确识别这些字段(在javascript变量中分配)?

如何正确识别这些字段(在javascript变量中分配)?,javascript,regex,parsing,Javascript,Regex,Parsing,我必须用javascript解析这些字段: 这些字段是从服务器返回的,格式是固定的,唯一需要更改的是[]内返回的值,但格式是固定的,并且始终相同 var var_js= (02,02) AAAA #33 [00000122] Last Uo (08,00) DF #2[1111.888.88] UI AS (010,23) SD #1 [3^w^^r] YOu an 我在第一个字段中尝试了这个方法,但是控制台返回“false”和“null” 有人能找出我做错了什么吗?对于第一个字段,这是有效的

我必须用javascript解析这些字段:

这些字段是从服务器返回的,格式是固定的,唯一需要更改的是[]内返回的值,但格式是固定的,并且始终相同

var var_js=
(02,02) AAAA #33 [00000122] Last Uo
(08,00) DF #2[1111.888.88] UI AS
(010,23) SD #1 [3^w^^r] YOu an
我在第一个字段中尝试了这个方法,但是控制台返回“false”和“null”


有人能找出我做错了什么吗?

对于第一个字段,这是有效的:

^\(\d{2},\d{2}\)\s\w{4}\s\#\d{2}\s\[\d{8}\]\sLast Uo$
你犯了一大堆错误

  • 它的
    \d
    与数字不匹配
  • 您既没有逃过大括号,也没有逃过大括号
实例:


此模式显然不适用于其他两行。

您主要缺少一些
\
。这个正则表达式将匹配任何给定的行,从而产生三个匹配

const regex=/^-[(\d{2,3},\d{2})\w{2,4}\d{1,2}.[(\d{8}\d{4}.\d{3}.\d{2}.\d{1}w}.];
const str=`(02,02)AAAA#33[00000122]去年
(08,00)DF#2[1111.888.88]用户界面组件
(010,23)SD#1[3^w^r]你是一个`;
让火柴;
while((matches=regex.exec(str))!==null){
console.log(匹配项);

}
如果要匹配所有3个字符串,可以使用

^\(\d{2,3},\d{2}\)\s+[A-Z]{2,4}\s#\d+\s*\[[^\][]*\]\s+\w+\s+\w+$

模式将匹配:

  • ^
    字符串的开头
  • \(\d{2,3}、\d{2,}\)
    匹配
    ),然后是2-3位数字、逗号、2位数字和
  • \s+[A-Z]{2,4}
    匹配1+空格字符和2-4倍大写字符A-Z
  • \s#
    匹配单个空格字符和
    #
  • \d+\s*
    匹配1+个数字和可选的whitspace字符
  • \[^\][*\]
    使用
  • \s+\w+\s+\w+
    匹配2倍的1+whitspace字符和1+word字符
  • $
    字符串结尾
var var_js=`(02,02)AAAA#33[00000122]去年
(08,00)DF#2[1111.888.88]用户界面组件
(010,23)SD#1[3^w^r]你是一个`;
变量patt=/^\(\d{2,3}、\d{2}\)\s+[A-Z]{2,4}\s\\d+\s*\[^\][][*\]\s+\w+\s+/gm;

var_js.match(patt.forEach)(m=>console.log(m))
所以你需要一个正则表达式来匹配var_js?@caramba exactlycan你能编辑
var_js
来表示一个js变量吗?呈现的方式很难分辨其内容。如果
var_js
是一个字符串,请在其周围添加反勾号。请更新问题并解释一下
[此处]
中可能包含哪些值,因为现在它就像从小到大一样,有哪些限制?您可以将
let
替换为
var
。但我认为错误的原因是其他原因。正如您所看到的,您可以“运行代码片段”,它在模拟器匹配中不会出错correctly@Nedved95很难说,因为我自己无法重现这个问题。你得弄把小提琴什么的。请参见此处,您可以单击控制台并查看其工作情况:@Nedved95那么规则是什么?它可以是给定长度的任何字符、符号或数字?如果是,最小和最大长度是多少?如果没有或您不确定,请列出一些可能的场景,这些场景需要matched@Nedved95如果你不知道一个选项,你可以说,但是如果你添加
{0,10}
选项,你几乎可以匹配任何东西,这意味着0-10次,所以可能字符甚至不在那里。看到这个:正则表达式
\[\d{0,10}\^{0,10}[a-zA-Z]{0,10}{0,10}[a-zA-Z]{0,10}\]
m被全部三行填充,但我只想打印一行,我该怎么办?(即第二行)@ThefourthbirdUsing
var_js.match(patt)[1]
将为您提供第二行OK已解决,非常感谢,最后一条信息,我如何动态创建JSON,即通过分配“属性”和“值”?(即属性为“最后一个Uo”,UI为,而值为分配到方括号中的值)@第四只鸟,你有我的指示吗?我需要一个具有指定属性的json,我需要将存储在方括号中的值分配给它,我该怎么做?var json={Last Uo:value,UI AS:value,ecc..}在这个意义上@thefourthbirdies我理解你的意思,将返回var.match的值分配为值。[1]等等。。。但是假设你不知道行数,那可以超过3行,我怎么办?我的意思是,在这种情况下,我知道是3,但假设还有更多,但我不知道实际的数字。。我如何设置它?非常感谢。我知道使用stringify()作为一种方法,但在概念层面,我如何设置它@第四只鸟,如果你想取消评论,是的
^\(\d{2,3},\d{2}\)\s+[A-Z]{2,4}\s#\d+\s*\[[^\][]*\]\s+\w+\s+\w+$