looks -> great/*54[ [funny " -> [ " -> [great -> yolo] -> looks]][g-6ren">
gpt4 book ai didi

javascript - 对于正则表达式专家,按 -> 拆分并避免括号/引号内容

转载 作者:行者123 更新时间:2023-11-29 14:57:46 25 4
gpt4 key购买 nike

给定字符串:

funny -> A_gre$" [ "at -> looks -> great/*54[ [funny " -> [ " -> [great -> yolo] -> looks]][great] -> a2afg34423*/- -> yolo" -> [ "

分割成数组:

  1. 有趣
  2. A_gre$' [ '在
  3. 长相
  4. 很棒/*54[ [有趣' -> [ ' -> [很棒 -> yolo] -> 看起来]][很棒]
  5. a2afg34423*/-
  6. yolo' -> [ '

正则表达式解决方案??!?

基本上,如果括号周围有引号,请避免将括号用作开/关定界符,否则请确保开括号和闭括号之间的文本无效。我将如何使用 Regex 实现此目的?

我的解析器解决方案 Test

var s = "funny -> A_gre$' [ 'at -> looks -> great/\*54[ [funny ' -> [ ' ->"
+ "[great -> yolo] -> looks]][great] -> a2afg34423*/- -> yolo' -> [ '",
p = 0,
z = [0],
q = 0,
x = s.split('');

//Looking for \" not \'
for(var i = 0; i< x.length; i++){
var b = x[i],
c = x[i + 1],
q = b == "'" ? ++q : q,
p = !(q % 2) ? b == '[' ? ++p : b == ']' ? --p : p : p;

if(b == '-' && c == '>' && !p && !(q % 2))
z.push(i + 2);
if(i == x.length - 1){
z.push(x.length); x = [];
for(var u = 0; u < z.length; u++)
z[u + 1] !== undefined ?
x.push(s.substring(z[u], z[u + 2] !== undefined ?
z[u + 1]-2 : z[u + 1]).trim()) : 0;
}
}

console.log(x)

输出:

->>> [
"funny",
"A_gre$' [ 'at",
"looks",
"great/*54[ [funny ' -> [ ' -> [great -> yolo] -> looks]][great]",
"a2afg34423*/-",
"yolo' -> [ '"
]

最佳答案

试试这个模式:

([^\s\[\"]*\[[^\]]+\])\S*|([^\s\[\"]*\"[^\"]+\")\S*|(\w\S*)

使用regexpal看看它匹配什么。它由三部分组成。其中一个的描述如下:

([^\s\[\"]*\[[^\]]+\])\S*

表达式读取非空格、非引号和非括号字符,直到到达左括号,然后读取括号内容直到到达右括号,然后读取出现在其后的任何非空格字符。这是括号匹配部分更详细的描述:

\[         : opening bracket character
[ : regex syntax for starting a set definition
^ : It's a negative set, i.e., set of characters which are NOT:
\] : closing bracket character
]+ : regex syntax for ending a set definition and the + operator for matching 1 or more occurrences
\] : closing bracket character

另一部分处理引号,另一部分匹配不带括号和引号的单词。

以下代码显示了如何查看匹配项以及如何提取它们:

var input = 'funny -> A_gre$"[ "at -> looks -> great/54[ [funny "-> [ "-> [great -> yolo] -> looks]][great ] -> a2afg34423/- -> yolo"-> [ "'

var regexp = /([^\s\[\"]*\[[^\]]+\])\S*|([^\s\[\"]*\"[^\"]+\")\S*|(\w\S*)/g;

var result = input.match(regexp)
console.log("Array of matches are:");
console.log(result);

var results = regexp.exec(input);
while(results != null) {
console.log("index: " + results.index + " found: " + results[0]);
results = regexp.exec(input);
}

这可以在这里看到:http://jsfiddle.net/LXqch/1/

关于javascript - 对于正则表达式专家,按 -> 拆分并避免括号/引号内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15104811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com