0

次の文字列のいずれかが ##、?? で可能であると仮定します。および::区切り文字です...

test1 = 'Foo##Bar'
test2 = 'Foo Bar??Baz Mumbe'
test3 = 'SomeFoo::Some Bar'
test4 = 'Foo Bar Baz'

今、私はしたい...

  1. ##、?? または :: 一致し、一致する場合はどれか
  2. デリミタの前後にあるものをキャプチャ

文字列操作は機能しますが、複雑すぎるように見えます。

4

3 に答える 3

1

あなたは次のようなものを使うことができます

var m,
    before,
    after,
    delimiter,
    test = 'Foo##Bar';

if ( m = test.match( /^(.*?)(##|\?\?|::)(.*)$/ ) ) {
    before = m[1];
    delimiter = m[2];        
    after = m[3];
}

区切り文字は、最初##に発生する??か、のいずれかになります::

于 2013-02-10T10:59:53.687 に答える
1

わかりました、私は実際に正規表現を構築することがいくらかできると思います...

var reg = /(.*)(\#\#|::|\?\?)(.*)/g;

さて、RexExpのexec関数を使用すると、次のようになります...

var match = reg.exec('foo bar##baz mumble');

=>match = ["foo bar##baz mumble", "foo bar", "##", "baz mumble"];

于 2013-02-10T10:55:57.513 に答える
0
test1 = 'Foo##Bar'
test2 = 'Foo Bar??Baz Mumbe'
test3 = 'SomeFoo::Some Bar'
test4 = 'Foo Bar Baz'

function match(s){
    if(typeof s === "undefined") return "";
    var res = /(.*)(##|\?\?|::)(.*)/g.exec(s);
    return res;
}

console.log(match(test2)[1]); // before the delimiter
console.log(match(test2)[3]); // after the delimiter
于 2013-02-10T11:01:23.550 に答える