正则表达式:匹配字符串OUTSIDE对

时间:2019-06-22 22:40:13

标签: javascript regex

我正尝试将一组外部配对的字符串与正则表达式匹配。

关于此问题至少有一篇文章,但是我不清楚这是如何工作的。 Regex match text outside of brackets

例如,示例字符串为:

<= \( <= \) <= \( <= \) <= \( <= \)

我当前的正则表达式使用了先行式和后行式,尽管这不起作用:

(?<=(\\\)))<=(?=(\\\())

我想匹配{=不在\( \)之间的<=,所以我可以用&le替换它以获得:

&le \( <= \) &le \( <= \) &le \( <= \)

请注意,\( \)可能存在或可能不存在。

2 个答案:

答案 0 :(得分:1)

您必须为此使用替换功能。最终匹配output_data = dataset.iloc[:,9].values #Encoding the categorical output data (There is no categorical input data) one_hot_encoder = OneHotEncoder(categorical_features = [0]) output_data = one_hot_encoder.fit_transform(output_data).toarray() ,然后匹配\(,或者匹配\)。如果括号匹配,则用整个匹配替换(以使括号内的内容保持不变)-否则,将<=匹配替换为<=

&le

const input = String.raw`<= \( <= \) <= \( <= \) <= \( <= \)`; const output = input.replace( /\\(.*?\\)|<=/g, match => match === '<=' ? '&le' : match ); console.log(output);表示匹配:

  • \\(.*?\\)|<=-文字反斜杠,后跟\\(
  • (-任何字符,直到遇到
  • .*?-文字反斜杠,后跟\\)

或匹配

  • )-普通字符<=

(如果JS引擎更高级,则可能没有替换功能,例如<=,但JS不支持该功能)

在Javascript中使用后向时要小心-只有非常新的浏览器才支持。许多较旧的浏览器无法理解它,并且会引发错误。如果您希望自己的网站能够为尽可能多的访问者服务,则最好避免在可能的情况下(至少在可预见的将来)使用向后搜索。

答案 1 :(得分:0)

您可以使用(?<!([^\\]*\\\())(<=)(?!([^\\]*\\\))),它使用否定的lookbehinde和否定的lookahead来确保后面没有\(,并且前面没有\)

否定前瞻/后视与肯定前瞻/后视相同,除了它检查是否不存在该组而不是检查是否存在。

Regexr Link

希望这会有所帮助。