为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式获取 () 之间的字符串

正则表达式获取 () 之间的字符串

catspeake 2023-03-18 11:22:36
我有文字   var text =  (hello) world this is (hi) text我想写一个正则表达式函数,这样我就可以得到parseText(text) // returns ['hello', 'hi']我试过这个但没有用:'(hello) world this is (hi) text'.match('((.*?))')
查看完整描述

3 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

你可以尝试: /\([^\)]+\)/g

  1. \(: 转义字符

  2. [^\)]+: 一个或多个字符包括符号直到)char。

  3. \): 转义字符

  4. g标志:搜索所有巧合

//img1.sycdn.imooc.com//64152ea10001f31304980205.jpg

const regex = /\([^\)]+\)/g;

const str = `(hello) world this is (hi) text`;


console.log(

  str.match(regex) // this returns an string array

    .map(i => i.slice(1, -1)) // remove first and last char

);

尖端:

关于第 2 点,您可以更改为[\)]*对零个或多个字符生效。

如果你只需要字符串,你可以使用\w+or \w*

如果你只需要的话,你可以使用/\(\b\w+\b\)/g


查看完整回答
反对 回复 2023-03-18
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

除了使用组或match结果的后处理之外,您还可以使用match前瞻/后视的单个正则表达式:

var text = " (hello) world this is (hi) text"

var output = text.match(/(?<=\().*?(?=\))/g)

console.log(output)

输出:

[ 'hello', 'hi' ]

解释:

  • (?<=...)...积极回顾。匹配在 be 之前...,但...不包含在匹配中

  • (?<=\()... 正面回顾(角色

  • .*...任何字符的零次或多次

  • .*?...的非贪婪版本.*

  • (?=...)...积极的前瞻,比赛之后是......不包括在比赛中

  • (?=\)))...角色的正面前瞻

  • /.../g...g是全局标志,匹配找到所有,而不仅仅是第一个,出现

  • 不要忘记转义“特殊字符”,例如括号


查看完整回答
反对 回复 2023-03-18
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

'(hello) world this is (hi) text'.match(/\([\w]*\)/g)

这将返回[ "(hello)", "(hi)" ],您可以运行另一个解析函数来删除那个额外的括号。


const text = '(hello) world this is (hi) text';

const list = text.match(/\([\w]*\)/g);

const parsed = list.map(item => item.replace(/\(|\)/g, ''));

console.log(parsed);


查看完整回答
反对 回复 2023-03-18
  • 3 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信