正则表达式 - 捕获括号和括号内的任何内容

时间:2017-08-31 04:57:59

标签: javascript regex reactjs

我在正则表达式上非常糟糕,我不知道如何处理这个问题。我想捕获()或[](包括括号)内的任何内容,之后没有任何内容。例如,如果我输入[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]。 &#34;狗&#34;不应该出现,因为它不在我的名单上。在regexr它似乎工作正常。我不确定要添加什么。

编辑:我认为我原来的帖子信息不足。用户键入输入栏,使用.split()将其拆分为数组。我的主要目标是允许用户添加少量文本。例如,如果我的json有条款&#34; cat&#34;,&#34; dog&#34;,&#34; pig&#34;并且用户键入这些术语,然后它将返回一些东西。 This is what I get using the suggestions below.请注意&#34; f&#34;第一次返回箭头,但不是第二次。我不确定为什么会这样。我可能正在使用&#34;匹配&#34;错误。我尝试了这个并且我得到了一个错误&#34;无法读取未定义的属性&#34;:

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)
                }

3 个答案:

答案 0 :(得分:0)

我还有一个json充满了用户类型的术语。如果该术语不在json上,则它不应该打印。

您可以使用

obj.hasOwnProperty(prop);

这将告诉您对象是否包含指定的道具。这是一个例子 -

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

答案 1 :(得分:0)

以下是两个可以使用的简单正则表达式。一个匹配括号,另一个匹配括号。

第三种是检查其中之一的组合。不过请注意,您只能使用[ ]( )中的每一个。如果你接受任何一种的多重,那么正则表达式将会中断,因为它将返回最外层的所有字符。

使用匹配它会返回一个数组,所以如果你知道你只得到一个结果,你可以抓住第一个项目,比如result和result2。如果没有,你可以像结果一样处理结果数组。

&#13;
&#13;
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)' ]
&#13;
&#13;
&#13;

.字符匹配任何内容,*将重复0次或更多次。 \字符可用于在必要时(以及任何其他特殊的正则表达式字符)转义[]()。最后的g将检查整个字符串。

希望这足以让你不受困扰。

答案 2 :(得分:0)

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

说明:阅读&#39; [&#39;或&#39;(&#39;,然后阅读任何内容,直到有&#39;]&#39;或&#39;)&#39;

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