javascript - 匹配多次

标签 javascript regex

我有一个正则表达式。

(\w+(?==\w+)|(?!==\w+)\w+)(?!\{\{)(?!.*token)(?=.*}})

测试字符串:

some text {{token id=foo1 class=foo2 attr1=foo3 hi=we}} more text {{token abc=xyz}} final text

但是,这仅匹配 {{token abc=xyz}}而不是 {{token id=fool class=foo2 attr1=foo3 hi=we}}

我已经使用过g修饰符。

如何修改以匹配第一个?

最佳答案

这符合您想要做的事情
(如果您想在下游检查上跨行,请将 . 替换为 [\S\s])

第一个解决方案无法验证{{token 存在

 #  /(?:(\w+)=(\w+))(?=(?:(?!{{token[ ]|}}).)*}})/

 (?:            # Next key,val pair
      ( \w+ )   # (1)
      = 
      ( \w+ )   # (2)
 )
 (?=            # Downstream, must be a }}
      (?:
           (?! {{ token [ ] | }} )
           . 
      )*
      }}            
 )

Perl 测试用例

$/ = undef;

$str = <DATA>;

while ( $str =~ /(?:(\w+)=(\w+))(?=(?:(?!{{token[ ]|}}).)*}})/g )
{
     print "$1 = $2\n";
}

__DATA__
some text {{token id=foo1 class=foo2 attr1=foo3 hi=we}} more text {{token abc=xyz}} final text

输出>>

id = foo1
class = foo2
attr1 = foo3
hi = we
abc = xyz
<小时/>

此解决方案使用两个正则表达式。一个用于获取 {{token .. }},一个用于解析 key=value

 # Regex 1

 {{ token \b 
 (?:
      (?! {{ | }} )
      . 
 )+
 }}

 # Regex 2

 (?:            # Next key,val pair
      ( \w+ )   # (1)
      = 
      ( \w+ )   # (2)
 )

关于javascript - 匹配多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22512544/

相关文章:

javascript - 使用 ng-class 单击时不附加类

javascript - 用于查找字母数字 ID 的正则表达式

python - 用于解析字符串并根据运算符分隔获取输出的正则表达式

javascript - 如何使 $ ('#some-id' ) 返回与 getElementById ('some-id' 相同的对象)

javascript - 使用 Node.js 进行 curl 请求

java - 如何在 Java/Android 中去掉字符串的结尾?

java - .split() 包含字符 "++"的字符串

python - 如何使用 re.DOTALL 跨多行文本搜索正则表达式模式?

javascript - 如何调用动态加载的 JavaScript 函数

javascript - chrome.browserAction.setBadgeText 可以从脚本加载字符串吗?