我正在尝试将其转换为:
\/\*[^*\/]*(?:(?!\/\*|\*\/)[*\/][^*\/]*)*\*\/g
这是一个嵌套的正则表达式,可以完美地工作


/* one */
东西一
/ *两个/* three */两个* /
东西二
/* four */




变成这样的东西:
a: {[^\}]*(?:(?!a: {|\})[\}][^\}]*)*\}g(无法正常工作)
我一直在努力使它工作好几天了……运气不佳。


a: { one }
东西一
答:{两个a: { three }两个}
东西二
a: { four }



应该如何工作



source = "/* one */ Stuff one /* two  /* three */  two */ Stuff two /* four */"

regex = /\/\*[^*\/]*(?:(?!\/\*|\*\/)[*\/][^*\/]*)*\*\//g

results = source.match(regex)


$("body").append("<pre>" + JSON.stringify(results, null, 2) + "</pre>")

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>





我做了什么



source = "a: { one } Stuff one a: { two  a: { three }  two } Stuff two a: { four }"

regex = /a: {[^\}]*(?:(?!a: {|\})[\}][^\}]*)*\}/g

results = source.match(regex)


$("body").append("<pre>" + JSON.stringify(results, null, 2) + "</pre>")

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>





我所做的……显示以下内容:
a: { one }
东西一
a: { two a: { three }两个}
东西二
a: { four }



但是应该是这个
a: { one }
东西一
答:{两个a: { three }两个}
东西二
a: { four }

最佳答案

捕捉最深的巢

使用/\ba: {(?:(?!\ba: {.*}).)*?}/g



source = "a: { one } Stuff one a: { one a: { two a: { three } two} one } a: { one a: { two } one } fdsf dsae a: { one } Stuff two Stuff three a: { one a: { two a: { three a: { four } three} two} one } a: { one }"

regex = /\ba: {(?:(?!\ba: {.*}).)*?}/g
results = source.match(regex)


$("body").append("<pre>" + JSON.stringify(results, null, 2) + "</pre>")

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>








用于捕获整个巢

使用/\ba: {.*?(?:(?!\ba: {.*}).)*}/g



source = "a: { one } Stuff one a: { one a: { two a: { three } two} one } a: { one a: { two } one } fdsf dsae a: { one } Stuff two Stuff three a: { one a: { two a: { three a: { four } three} two} one } a: { one }"

regex = /\ba: {.*?(?:(?!\ba: {.*}).)*}/g
results = source.match(regex)


$("body").append("<pre>" + JSON.stringify(results, null, 2) + "</pre>")

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>








必须被视为巢

使用/\ba: {[^}]*\ba: .*?(?:(?!\ba: {.*}).)*}/g



source = "a: { one } Stuff one a: { one a: { two a: { three } two} one } a: { one a: { two } one } fdsf dsae a: { one } Stuff two Stuff three a: { one a: { two a: { three a: { four } three} two} one } a: { one }"

regex = /\ba: {[^}]*\ba: .*?(?:(?!\ba: {.*}).)*}/g
results = source.match(regex)


$("body").append("<pre>" + JSON.stringify(results, null, 2) + "</pre>")

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>








组织可能的嵌套和真实的嵌套

使用/\ba: {\s?[^}]*\ba: {.*?(?:(?!\ba: {.*}).)*}|(\ba: {.*?(?:(?!\ba: {.*}).)*})/g



source = "a: { one } Stuff one a: { one a: { two a: { three } two} one } a: { one a: { two } one } fdsf dsae a: { one } Stuff two Stuff three a: { one a: { two a: { three a: { four} three} two} one } a: { one }"

regex = /\ba: {\s?[^}]*\ba: {.*?(?:(?!\ba: {.*}).)*}|(\ba: {.*?(?:(?!\ba: {.*}).)*})/g
results = source.match(regex)

for (let i = 0; i < results.length; i++) {
  breakdown = regex.exec(source)

  if (breakdown[1]) {
    $(".box1").append(breakdown[1] + '<br>')
  } else {
    $(".box2").append(breakdown[0] + '<br>')
  }

}

.boxes {
  padding: 0px 30px;
  position: absolute;
}

.box2 {
  right: 0px;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="boxes box1"></div>
<div class="boxes box2"></div>

关于javascript - 如何使用嵌套RegEx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46751959/

10-11 11:57