正则表达式在锚名称中查找空格?

时间:2018-11-29 21:02:30

标签: regex

我试图提出一个正则表达式来查找锚点ID和名称值中存在的空间。

例如,在标记中

<a id="Subsection Two Test One Two Three" name="Subsection Two Test One Two Three">

regex会在引号之间找到空格,但忽略a和id之间以及“和name之间的空格,并忽略标记之外的任何内容。

目标是在Sublime Text中使用正则表达式查找属性值中的空格,并将其替换为下划线。

2 个答案:

答案 0 :(得分:0)

您必须使用知道如何匹配标签的正则表达式。

程序:

在源上进行2次全部替换传递。您需要回调以下划线替换空格。


将解释第一个, ID NAME 是第二遍(过程相同)。

<a(?=\s)(?=((?:[^>"']|"[^"]*"|'[^']*')*?\sid\s*=\s*)(?:(['"])([\S\s]*?)\2)((?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)*?>))\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+>

ID

replace dall 正则表达式

解释

 # Begin Anchor tag

 < a                 
 (?= \s )
 (?=                           # Asserttion (a pseudo atomic group)
      (                             # (1 start), Up to ID attribute
           (?: [^>"'] | " [^"]* " | ' [^']* ' )*?
           \s id \s* = \s* 
      )                             # (1 end)
      (?:
           ( ['"] )                      # (2), Quote
           ( [\S\s]*? )                  # (3), ID Value
           \2 
      )
      (                             # (4 start), After ID attribute
           (?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )*?
           >
      )                             # (4 end)
 )

 # Have the ID, just match the rest of tag

 \s+ 
 (?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+

 >                             # End Anchor tag

在回调中,这些组将连接在一起以形成替换
像这样

//存储捕获的组
$ g1 = match.groups [1];
$ g2 = match.groups [2];
$ g3 = match.groups [3];
$ g4 = match.groups [4];

//从存储的捕获组构造返回字符串

返回"<a" + $g1$g2 +
replaceAll($g3, " ", "_") + //这是一个regex全局替换函数
$g2$g4;

图例:
组1 =最多ID属性
组2 =值分隔符
组3 = ID值
组4 = ID属性后


回调的Name属性是相同的,请将此正则表达式用于全部替换

<a(?=\s)(?=((?:[^>"']|"[^"]*"|'[^']*')*?\sname\s*=\s*)(?:(['"])([\S\s]*?)\2)((?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)*?>))\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+>

答案 1 :(得分:0)

您可以使用以下正则表达式用空字符串替换Spaces(您的正则表达式引擎必须支持look behindlook ahead):

/(?<!\<a)(?<=\w)\s(?=\w)/g

正则表达式首先为negative look behind制作一个'<a'

然后,它为look behind生成一个正数Word character,然后与一个White space匹配一个looks ahead,最后匹配一个Word字符。{p>

现在replaceempty string的比赛。