2017-08-31 70 views
1

在正则表达式中我真的很糟糕,我不知道该怎么做。我想在()或[](包括方括号)内捕捉任何内容,之后什么都没有。例如,如果我键入[this is text]我希望它返回完全。另外我有一个json充满了用户类型的术语。如果该术语不在json上,则不应该打印。这是与正则表达式有关的代码片段。正则表达式 - 在圆括号和括号内捕获任何东西

let sf_re = /(?:(,)\s+|\s+(xx)\s+)|\+|(,)/  
     if (document.querySelector(".images")){ 
      document.querySelector(".images").innerHTML = "" 
      for(var i=0;i<item.length;i++){ 
       if(/(\[(.*?)\]|\((.*?)\))/.test(item[i])){ 
        let text = item[i] 
        let note = document.createElement("span") 
        note.innerHTML = String(text) 
        document.querySelector(".images").appendChild(note) 
       } 

Here is an example of what happens

唯一令应显示为[cat cat cat]。 “狗”不应该出现,因为它不在我的名单上。在regexr中,它似乎工作正常。我不知道要添加什么。

编辑:我认为我原来的文章没有足够的信息。用户使用.split()键入输入栏,该输入栏被拆分为一个数组。我的主要目标是允许用户添加小段文字。例如,如果我的json有术语“猫”,“狗”和“猪”,并且用户键入这些术语,那么它将返回一些内容。 This is what I get using the suggestions below.注意“f”第一次如何返回箭头,但不是第二次。我不知道为什么会发生这种情况。我可能会使用“匹配”错误。我尝试这样做,我得到一个错误“无法读取的未定义的属性”:

let regex = /(\[(.*?)\]|\((.*?)\))/ 
if (document.querySelector(".images")){ 
      document.querySelector(".images").innerHTML = "" 
      for(var i=0;i<item.length;i++){ 
       if(item[i].match(regex)[0]){ 
        let text = item[i] 
        let note = document.createElement("span") 
        note.innerHTML = String(text) 
        document.querySelector(".images").appendChild(note) 
       } 
+0

'另外我有一个JSON充满了用户类型的术语......然后使用JSON解析器,而不是原始正则表达式。 –

回答

0

另外我有一个JSON全部条款的用户类型。如果该术语不在json上,则不应该打印。

您可以使用

obj.hasOwnProperty(prop); 

这将让你知道对象是否包含指定的道具。下面是一个例子 -

var x = { 
 
    y: 10 
 
}; 
 
alert(x.hasOwnProperty("y")); //true 
 
alert(x.hasOwnProperty("z")); //false

0

这里有两个简单的regexs就可以使用。一个匹配括号,另一个匹配括号。

第三个是检查两者之一的组合。但是,请记住,您只能使用[ ]()中的每一个。如果你接受多种类型的任何一种,那么正则表达式会中断,因为它会返回最外层字符之间的所有字符。

使用match可以返回一个数组,所以如果你知道你只能得到一个结果,那么你可以抓取第一个元素,比如结果和result2。如果不是,你可以像result3那样处理结果数组。

const regex = /\[.*\]/ 
 
const regex2 = /\(.*\)/ 
 
const regex3 = /(\[.*\])|(\(.*\))/g 
 

 
const result = ("[cat cat cat]dog").match(regex3)[0]; 
 
const result2 = ("banana(cat cat)horse").match(regex3)[0]; 
 
const result3 = ("alfred[cat cat cat]banana(dog dog)").match(regex3); 
 

 
console.log(result); //[cat cat cat] 
 
console.log(result2); //(cat cat) 
 
console.log(result3); // [ '[cat cat cat]', '(dog dog)' ]

.字符匹配任何东西,和*将重复0次或更多次。根据需要,\字符可用于转义[],()(以及任何其他特殊的正则表达式字符)。末尾的g将检查整个字符串。

希望这应该足以让你不被卡住。

0

正则表达式是[\[|\(](.*)[\]\)]

说明:读 '[' 或 '(',然后读取任何事情,直到有一个 ']' 或 ')'

var regexp = /[\[|\(](.*)[\]\)]/; 
 
var match = ("[cat cat cat]dog").match(regexp); 
 
console.log(match[1]);