我坚持创建正则表达式,这样如果单词前面或以特殊字符结束,则每个正则表达式上的正则表达式不止一个正则表达式' exec'方法应该抛出null。只有当文字的每一侧都包含一个支架时,才会执行#exe;'方法应该给出结果下面是我提出的正则表达式。
如果字符串类似于"(测试)"或者只有regex.exec应具有其他组合的值,例如"((test))"或"((测试)"或"(测试))"它应该为null。下面的代码不会抛出它应该的null。请建议。
var w1 = "\(test\)";
alert(new RegExp('(^|[' + '\(\)' + '])(' + w1 + ')(?=[' + '\(\)' + ']|$)', 'g').exec("this is ((test))"))

答案 0 :(得分:2)
如果您有单词列表并希望对其进行过滤,则可以执行以下操作。
string.split(' ').filter(function(word) {
return !(/^[!@#$%^&*()]{2,}.+/).test(word) || !(/[!@#$%^&*()]{2,}$).test(word)
});
split()
函数在空格字符处拆分一个字符串并返回一个单词数组,然后我们可以filter
。
为了保留有效单词,我们将测试两个正则表达式,以查看单词是分别以2个或更多特殊字符开头还是结尾。
RegEx细分
^
- 表达式从以下
[]
- 块中的单个字符
!@#$%^&*()
- 这些是我使用过的特殊字符。用你想要的替换它们。
{2,}
- 匹配2个或更多前置字符
.+
- 匹配任何字符中的1个或多个
$
- 表达式以以下
以这种方式使用exec
功能执行此操作
!(/^[!@#$%^&*()]{2,}.+/).exec(string) || !(/[!@#$%^&*()]{2,}$).exec(string)
答案 1 :(得分:1)
如果我理解正确,您正在寻找包含(test)
的任何字符串,在其中的任何位置,正是这样,对吧?
在这种情况下,您可能需要的是以下内容:
var regExp = /.*[^)]\(test\)[^)].*/;
alert(regExp.exec("this is ((test))")); // → null
alert(regExp.exec("this is (test))" )); // → null
alert(regExp.exec("this is ((test)" )); // → null
alert(regExp.exec("this is (test) ...")); // → ["this is (test) ..."]
说明:
.* matches any character (except newline) between zero and unlimited times, as many times as possible.
[^)] match a single character but not the literal character )
这可以确保在给定的字符串中有你的测试字符串,但它只包含在每一面的一个支撑!
答案 2 :(得分:1)
您可以使用以下正则表达式:
(^|[^(])(\(test\))(?!\))
请参阅regex demo here,替换为$1<span style="new">$2</span>
。
正则表达式包含一个替换组(^|[^(])
,它匹配字符串^
的开头或(
以外的任何字符。这种交替是一种解决方法,因为JS正则表达式引擎不支持后视。
然后,(\(test\))
匹配并捕获(test)
。请注意圆括号是转义的。如果不是,他们将被视为捕获组分隔符。
(?!\))
是预示,确保)
之后没有文字test)
。 JS正则表达式引擎完全支持前瞻。
JS片段:
var re = /(^|[^(])(\(test\))(?!\))/gi;
var str = 'this is (test)\nthis is ((test))\nthis is ((test)\nthis is (test))\nthis is ((test\nthis is test))';
var subst = '$1<span style="new">$2</span>';
var result = str.replace(re, subst);
alert(result);
&#13;